Skip to content

Instantly share code, notes, and snippets.

@blubbll
Created November 12, 2019 10:13
Show Gist options
  • Save blubbll/34c143d1f2f9cbb565ddf0f99e8a6996 to your computer and use it in GitHub Desktop.
Save blubbll/34c143d1f2f9cbb565ddf0f99e8a6996 to your computer and use it in GitHub Desktop.
webapi basecontroller c#
using System;
using System.Web;
using System.Web.Http;
using System.Web.Http.Controllers;
using System.Web.Http.Routing;
using System.Web.Http.WebHost;
using System.Web.Routing;
using System.Web.SessionState;
namespace filetransfer
{
public static class webApiConfig
{
public class BaseController : ApiController
{
}
public static string prefix = "webapi";
public class WebApiCustomDirectRouteProvider : System.Web.Http.Routing.DefaultDirectRouteProvider
{
protected override System.Collections.Generic.IReadOnlyList<System.Web.Http.Routing.IDirectRouteFactory>
GetActionRouteFactories(System.Web.Http.Controllers.HttpActionDescriptor actionDescriptor)
{
return actionDescriptor.GetCustomAttributes<System.Web.Http.Routing.IDirectRouteFactory>(inherit: true);
}
private readonly string _centralizedPrefix;
public WebApiCustomDirectRouteProvider(string centralizedPrefix)
{
_centralizedPrefix = centralizedPrefix;
}
protected override string GetRoutePrefix(HttpControllerDescriptor controllerDescriptor)
{
var existingPrefix = base.GetRoutePrefix(controllerDescriptor);
if (existingPrefix == null) return _centralizedPrefix;
return string.Format("{0}/{1}", _centralizedPrefix, existingPrefix);
}
}
public static void Register(HttpConfiguration config)
{
//Vererbung erlauben
config.MapHttpAttributeRoutes(new WebApiCustomDirectRouteProvider("webapi"));
//Zugriff auf Session ermöglichen
var httpControllerRouteHandler = typeof(HttpControllerRouteHandler).GetField("_instance", System.Reflection.BindingFlags.Static | System.Reflection.BindingFlags.NonPublic); if (httpControllerRouteHandler != null)
{ httpControllerRouteHandler.SetValue(null, new Lazy<HttpControllerRouteHandler>(() => new SessionHttpControllerRouteHandler(), true)); }
//json statt xml ausgeben
config.Formatters.JsonFormatter.MediaTypeMappings
.Add(new System.Net.Http.Formatting.RequestHeaderMapping("Accept", "text/html", StringComparison.InvariantCultureIgnoreCase, true, "application/json"));
}
#region Sitzung im webApi
public class SessionControllerHandler : HttpControllerHandler, IRequiresSessionState
{
public SessionControllerHandler(RouteData routeData) : base(routeData)
{ }
}
public class SessionHttpControllerRouteHandler : HttpControllerRouteHandler
{
protected override IHttpHandler GetHttpHandler(RequestContext requestContext)
{ return new SessionControllerHandler(requestContext.RouteData); }
}
#endregion Sitzung im webApi
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment