首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在Web API中正确实现IAuthorizationFilter

在Web API中正确实现IAuthorizationFilter
EN

Stack Overflow用户
提问于 2013-04-13 03:05:38
回答 2查看 14.8K关注 0票数 23

我很难弄清楚如何使用System.Web.Http.Filters的IAuthorizationFilter在Web API中实现授权过滤器。

这是我编写的一个简单过滤器,用403禁止响应响应所有非https请求:

代码语言:javascript
复制
public class HttpsFilter : IAuthorizationFilter {
    public bool AllowMultiple {
        get {
            return false;
        }
    }

    public Task<HttpResponseMessage> ExecuteAuthorizationFilterAsync( HttpActionContext actionContext, CancellationToken cancellationToken, Func<Task<HttpResponseMessage>> continuation ) {
        var request = actionContext.Request;

        if ( request.RequestUri.Scheme != Uri.UriSchemeHttps ) {
            HttpResponseMessage response = request.CreateResponse( HttpStatusCode.Forbidden );
            response.Content = new StringContent( "<h1>HTTPS Required</h1>", Encoding.UTF8, "text/html" );
            actionContext.Response = response;

            return new Task<HttpResponseMessage>( delegate() {
                return response;
            } );
        }
        else
            return continuation();
    }
}

到目前为止,我写的东西都在运行,但是当我试图通过常规的http访问api时,它就挂起了,而且我从来没有得到过响应。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-04-13 03:10:32

在返回任务之前,您需要将任务保存到变量中并调用task.Start()方法,或者使用Task<HttpResponseMessage>.Factory.StartNew(Action action)方法创建任务。

票数 6
EN

Stack Overflow用户

发布于 2013-04-13 03:19:58

对于您的场景,您可以简单地从"System.Web.Http.AuthorizeAttribute“派生。

示例:

代码语言:javascript
复制
public class HttpsFilterAttribute : System.Web.Http.AuthorizeAttribute
{
    public override void OnAuthorization(System.Web.Http.Controllers.HttpActionContext actionContext)
    {
        //do something
    }
}
票数 8
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15978999

复制
相关文章

相似问题

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