Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/32.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 是否在web.config或global.asax EndRequest事件中重定向401?_C#_Asp.net_Web Config_Global Asax - Fatal编程技术网

C# 是否在web.config或global.asax EndRequest事件中重定向401?

C# 是否在web.config或global.asax EndRequest事件中重定向401?,c#,asp.net,web-config,global-asax,C#,Asp.net,Web Config,Global Asax,我有一个网站正在使用表单身份验证,但登录url实际上是一个页面(“WinLogin.aspx”),设置为使用windows身份验证。这样,如果用户在我们的网络上,WinLogin.aspx将捕获他们的域登录,他们可以继续进入应用程序,而无需重新输入用户名和密码。但是如果他们没有登录到域中,WinLogin.aspx会给出一个401错误,浏览器通常会通过要求用户输入用户名和密码以检查域服务器来解释该错误。 我想将这些401错误重定向到我自己的自定义页面,以获取用户名和密码,这样我就可以进行真正的表

我有一个网站正在使用表单身份验证,但登录url实际上是一个页面(“WinLogin.aspx”),设置为使用windows身份验证。这样,如果用户在我们的网络上,WinLogin.aspx将捕获他们的域登录,他们可以继续进入应用程序,而无需重新输入用户名和密码。但是如果他们没有登录到域中,WinLogin.aspx会给出一个401错误,浏览器通常会通过要求用户输入用户名和密码以检查域服务器来解释该错误。 我想将这些401错误重定向到我自己的自定义页面,以获取用户名和密码,这样我就可以进行真正的表单身份验证,因为我的应用程序中的一些帐户没有相应的域帐户。 我可以在web.config文件中重新路由401错误,如下所示:

    <httpErrors errorMode="Custom">
        <error statusCode="401" path="/Redirect401.aspx" />
    </httpErrors>
void Application_EndRequest(object sender, System.EventArgs e)
{
    if (((Response.StatusCode == 401) && (Request.IsAuthenticated == true)))
    {
        Response.ClearContent();
        Response.Redirect("~/Redirect401.aspx");
    }
}

是否有任何理由选择这两种方法?

如果您的错误处理是直接的,并且在重定向到错误页面之前您不想做任何事情,那么您需要使用web.config方法。在这两种情况下,我倾向于在global.asax中捕获错误,然后做一些日志记录,然后重定向到错误页面,如果是MVC应用程序,则选择错误控制器。在我的上一个应用程序中,我在一个MVC应用程序中使用了这种方法,并让错误控制器在返回视图之前采取一些措施。例如,在401错误的情况下,我将操作设置为403错误,因此它不会强制浏览器进入登录页面。因此,这完全取决于您对一种方法的需求,而不是另一种方法。

我的应用程序中出现此401错误的唯一原因是它们从我们的网络外部进入应用程序,WinLogin.aspx自然会给出此错误,然后我想直接将其重新路由到我的Redirect401.aspx页面,这将使应用程序返回到默认的表单身份验证模式。我还没有必要对这个错误进行任何日志记录或任何其他处理。尽管如此,根据您的第一句话,我倾向于web.config方法。确切地说,只要保持简单,并根据需要扩展功能即可。如果你只需要滑板,就不要造汽车。