Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/269.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# MVC5 IIS7将控制器/视图用作401错误_C#_Asp.net Mvc_Iis_Windows Authentication_Custom Error Pages - Fatal编程技术网

C# MVC5 IIS7将控制器/视图用作401错误

C# MVC5 IIS7将控制器/视图用作401错误,c#,asp.net-mvc,iis,windows-authentication,custom-error-pages,C#,Asp.net Mvc,Iis,Windows Authentication,Custom Error Pages,我已经尝试了几天让我的MVC5应用程序部署在Windows2008R2上,并使用iis7返回401的控制器。我希望能够使用此自定义控制器从服务器检索有关联系人详细信息的信息,以获得用户并访问应用程序。此服务器active directory与用户不同,但他们有权访问该服务器上的web应用程序 注意:在VS2013内置IIS上进行测试也可以在2008r2服务器上进行测试 我的应用程序有一个主控制器和一个AccessDenied控制器: 主控制器有一个自定义[授权],因为我已经实现了自己的 wind

我已经尝试了几天让我的MVC5应用程序部署在Windows2008R2上,并使用iis7返回401的控制器。我希望能够使用此自定义控制器从服务器检索有关联系人详细信息的信息,以获得用户并访问应用程序。此服务器active directory与用户不同,但他们有权访问该服务器上的web应用程序

注意:在VS2013内置IIS上进行测试也可以在2008r2服务器上进行测试

我的应用程序有一个主控制器和一个AccessDenied控制器:

主控制器有一个自定义[授权],因为我已经实现了自己的 windows身份验证之上的第二级身份验证

my[CustomAuthorize]检查用户是否有效,如果为true,则 检查用作特定用户白名单的“我的数据库” 如果用户不在白名单中或他们在白名单中,则返回false 在active directory中不是有效的

用户使用内置的弹出窗口登录以输入凭据

如果输入正确但不在白名单中,则为 已重定向到AccessDenied控制器

但是,如果用户单击“取消”,或连续输入“无效” 服务器使用内置的IIS 401.1、401.2或 401错误

我的初始system.web和system.webserver:

结果:

用户无效不在白名单中:访问被拒绝控制器 有效用户在白名单中:主控制器 用户已取消/凭据不正确:401.2 我试过了

HttpError标签 [匿名授权] 特定的匿名身份验证仍然提示登录 另一个问题:
是否可以允许对一个控制器进行匿名身份验证,但对另一个控制器使用windows身份验证?由于my accessdenied controller也在提示授权,即使没有授权属性

,您可能需要返回一个200 OK状态代码,并在视图中处理未授权。或者更好的方法是处理模型中必填字段的验证,并将失败的身份验证作为例外,但仍然返回200,因为身份验证函数返回时没有问题。用户单击取消[authorize]在调试我得到的唯一控件是global.asax和捕获应用程序_EndRequest的过程中,属性从未被使用和测试,但是当我尝试重定向到我的访问控制器时,它表示页面没有正确重定向。我还尝试了一个技巧,返回418“我是一个茶壶”,您强制响应,但IIS报告无效响应。如果您使用FormsAuthentication,并且您未经授权,forms auth将尝试重定向到登录,我打赌。您的登录方法应使用[Allow Anonymous]修饰。我正在使用windows身份验证,并且在AccessDenied控制器上使用了[AllowAnonymous]属性,windows身份验证是必不可少的,因为我需要对active directory进行身份验证。我可以为白名单上不存在的身份验证用户返回自定义401页AccessDenied控制器,但当用户在身份验证时按cancel时,我将保留默认的401/401.1/401.2页
  <system.web>
    <customErrors mode="On" >
      <error statusCode="401" redirect="\AccessDenied" />
    </customErrors>
    <compilation debug="true" targetFramework="4.5.1" />
    <httpRuntime targetFramework="4.5.1" />
    <authentication mode="Windows" />
    <authorization>
<!--      <deny users="?" />-->
    </authorization>
    <httpModules>
      <add name="ErrorLog" type="Elmah.ErrorLogModule, Elmah" />
      <add name="ErrorMail" type="Elmah.ErrorMailModule, Elmah" />
      <add name="ErrorFilter" type="Elmah.ErrorFilterModule, Elmah" />
    </httpModules>
    <httpHandlers>
      <add verb="POST,GET,HEAD" path="elmah.axd" type="Elmah.ErrorLogPageFactory, Elmah" />
    </httpHandlers>
  </system.web>

  <system.webServer>
    <modules runAllManagedModulesForAllRequests="true">
      <remove name="FormsAuthenticationModule" />
      <add name="ErrorLog" type="Elmah.ErrorLogModule, Elmah" preCondition="managedHandler" />
      <add name="ErrorMail" type="Elmah.ErrorMailModule, Elmah" preCondition="managedHandler" />
      <add name="ErrorFilter" type="Elmah.ErrorFilterModule, Elmah" preCondition="managedHandler" />
    </modules>
    <handlers>
      <remove name="ExtensionlessUrlHandler-Integrated-4.0" />
      <remove name="OPTIONSVerbHandler" />
      <remove name="TRACEVerbHandler" />
      <add name="ExtensionlessUrlHandler-Integrated-4.0" path="*." verb="*" type="System.Web.Handlers.TransferRequestHandler" preCondition="integratedMode,runtimeVersionv4.0" />
    </handlers>
    <validation validateIntegratedModeConfiguration="false" />
  </system.webServer>