首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在ASP.Net Web Api (ApiController)中禁用每个请求的会话状态

在ASP.Net Web Api (ApiController)中禁用每个请求的会话状态
EN

Stack Overflow用户
提问于 2020-09-16 23:04:51
回答 1查看 343关注 0票数 0

我有访问会话的ApiControllers,默认情况下需要SessionState。因此,我正在序列化请求,并希望禁用特定请求的会话状态。

this post中,我看到了一个普通控制器的解决方案,但我不知道如何在ApiControllers上做到这一点。

这是我的WebApiConfig

代码语言:javascript
复制
public static void Register(HttpConfiguration config)
    {
        RouteTable.Routes.MapHttpRoute(
            name: "DefaultApi",
            routeTemplate: "api/{controller}/{action}/{id}",
            defaults: new { id = RouteParameter.Optional }
        ).RouteHandler = new SessionRouteHandler();

        config.Routes.MapHttpRoute(
            name: "Default2",
            routeTemplate: "api/{controller}"
        );
    }

这是SessionControllerHandler

代码语言:javascript
复制
public class SessionControllerHandler : HttpControllerHandler, IRequiresSessionState
{
    public SessionControllerHandler(RouteData routeData)
        : base(routeData)
    { }
}

public class SessionRouteHandler : IRouteHandler
{
    IHttpHandler IRouteHandler.GetHttpHandler(RequestContext requestContext)
    {
        return new SessionControllerHandler(requestContext.RouteData);
    }
}

任何帮助都将不胜感激。谢谢

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-09-18 22:38:58

为了不序列化请求,在ReadOnly模式下为SessionState生成一个新的SessionControllerHandler

代码语言:javascript
复制
public class SessionControllerHandlerReadOnly : HttpControllerHandler, IReadOnlySessionState
{
    public SessionControllerHandlerReadOnly(RouteData routeData)
        : base(routeData)
    { }
}
public class SessionRouteHandlerReadOnly : IRouteHandler
{
    IHttpHandler IRouteHandler.GetHttpHandler(RequestContext requestContext)
    {
        return new SessionControllerHandlerReadOnly(requestContext.RouteData);
    }
} 

然后在WebApiConfig中添加一个使用该处理程序的新路由

代码语言:javascript
复制
RouteTable.Routes.MapHttpRoute(
            name: "DefaultApiReadOnly",
            routeTemplate: "apireadonly/{controller}/{action}/{id}",
            defaults: new { id = RouteParameter.Optional }
        ).RouteHandler = new SessionRouteHandlerReadOnly();

完成后,当您需要通过该处理程序处理特定请求时,您可以在发出请求时在RouteUrl中指定它

代码语言:javascript
复制
@Url.RouteUrl("DefaultApiReadOnly", new { httproute = true, controller = "controller", action = "action" })
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63922906

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档