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

标签 c# authentication asp.net-web-api owin custom-error-pages

我正在使用 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/

相关文章:

javascript - 仅在第一次访问 C# 网页时显示消息

Symfony FOSUserBundle - 登录 - 无效凭证

security - 如何验证 JavaScript 库?

docker - 事件名称应至少由斜杠分隔的 3 个部分组成。 Asp.Net Core Docker 中的参数名称 eventName

c# - 如何使用友好的名称通过 Web API 设置层次结构值,而不将结构本身暴露给用户?

c# - 在Windows XP计算机上运行SlimDX C#应用程序时遇到的麻烦

c# - JIT 和循环优化

authentication - 测试登录用户在 Laravel 4 中具有正确的 ID

c# - 为什么我只在红隼上得到 500?

c# - 想深入了解Http