使用Owin时的自定义错误页面

Nit*_*amk 5 c# authentication custom-error-pages asp.net-web-api owin

我正在使用Owin来托管WebAPI控制器.我有Owin中间件,它执行身份验证并在身份验证失败时设置以下内容:

context.Response.StatusCode = (int) HttpStatusCode.Unauthorized;
Run Code Online (Sandbox Code Playgroud)

当发生这种情况时,我想显示一个HTML页面,其中包含对用户的一些说明.(比如,"你需要登录.")

目前我只是将用户重定向到accessdenied.html页面,但我更希望在没有用户被重定向的情况下直接显示访问被拒绝(我不希望Web浏览器中的Location字段改变) .

我假设我可以动态生成HTML并将其添加到响应中,例如通过从资源中读取HTML内容.

我的问题是:是否可以使用配置自动显示自定义访问被拒绝错误页面?在"traditioinal"ASP.NET中,可以在web.config中设置customErrors,但这似乎不适用于Owin selfhost:

<customErrors>
  <error statusCode="401" redirect="~/accessdenied.html"/>
</customErrors>
Run Code Online (Sandbox Code Playgroud)

tmo*_*ira 3

在我之前的一个项目中,我必须使用这样的 Owin 中间件:

       app.Use((owinContext, next) =>
        {          
            return next().ContinueWith(x =>
            {
                if (owinContext.Response.StatusCode == 500 /*or 401 , etc*/)
                {                        
                    //owinContext.Response.Redirect(VirtualPathUtility.ToAbsolute("~/Home/Error"));
                    //this should work for self-host as well
                    owinContext.Response.Redirect(owinContext.Request.Uri.AbsoluteUri.Replace(request.Uri.PathAndQuery, request.PathBase + "/Home/Error"));
                }
            });                
        });
Run Code Online (Sandbox Code Playgroud)

您必须在所有其他中间件之前注册中间件。

在本例中,我将用户重定向到错误视图,但作为一般实践,我会说最好有一个 HTML 静态页面。

实际上我认为有一个处理全局异常的扩展请求。 看看这个链接...