我正在使用 Owin 来托管 WebAPI Controller 。我有 Owin 中间件,它执行身份验证并在身份验证失败时设置以下内容:
context.Response.StatusCode = (int) HttpStatusCode.Unauthorized;
发生这种情况时,我想向用户显示带有一些说明的 HTML 页面。 (例如,“您需要登录。”)
目前我只是将用户重定向到 accessdenied.html 页面,但我更愿意直接显示访问被拒绝而不重定向用户(我不希望 Web 浏览器中的 Location 字段改变)。
我假设我可以即时生成 HTML 并将其添加到响应中,例如通过从资源中读取 HTML 内容。
我的问题是:是否可以使用配置自动显示自定义拒绝访问错误页面?在“传统”ASP.NET 中,可以在 web.config 中设置 customErrors,但这似乎不适用于 Owin selfhost:
<customErrors>
<error statusCode="401" redirect="~/accessdenied.html"/>
</customErrors>
最佳答案
在我之前的项目中,我不得不使用这样的 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"));
}
});
});
您必须先注册中间件。
在这种情况下,我将用户重定向到错误 View ,但作为一般做法,我会说最好使用 HTML 静态页面。
实际上我认为有一个处理全局异常的扩展请求。 Have a look at this link...
关于c# - 使用 Owin 时的自定义错误页面,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29672072/