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)
在我之前的一个项目中,我必须使用这样的 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 静态页面。
实际上我认为有一个处理全局异常的扩展请求。 看看这个链接...
| 归档时间: |
|
| 查看次数: |
4016 次 |
| 最近记录: |