Asp.net mvc Can';使用IIS Express 8.0在Visual Studio 2013中调试时,使用Windows身份验证访问[Authorized]MVC方法

Asp.net mvc Can';使用IIS Express 8.0在Visual Studio 2013中调试时,使用Windows身份验证访问[Authorized]MVC方法,asp.net-mvc,authentication,visual-studio-debugging,visual-studio-2013,iis-8,Asp.net Mvc,Authentication,Visual Studio Debugging,Visual Studio 2013,Iis 8,我在解决方案中有两个项目,一个控制台应用程序和MVC项目。控制台应用程序将向http://localhost:68220/MyMvcArea/MyMvcController/MyMvcMethod。MyMvcMethod在MVC控制器中用[Authorized]属性修饰 在Visual Studio 2010和2012中,通过使用Windows身份验证模式的开发服务器进行调试是正常的。现在我正在用同样的解决方案试用Visual Studio 2013,我得到了一个401-未经授权的响应 我在全局

我在解决方案中有两个项目,一个控制台应用程序和MVC项目。控制台应用程序将向
http://localhost:68220/MyMvcArea/MyMvcController/MyMvcMethod
MyMvcMethod
在MVC控制器中用
[Authorized]
属性修饰

在Visual Studio 2010和2012中,通过使用Windows身份验证模式的开发服务器进行调试是正常的。现在我正在用同样的解决方案试用Visual Studio 2013,我得到了一个401-未经授权的响应

我在全局applicationhost.config文件和项目属性中为我的MVC项目启用了Windows身份验证,我可以在浏览器中访问该方法,但console应用程序仍会收到401响应。控制台应用程序也在我的Windows帐户下运行,因为我可以在任务管理器中验证它

有人知道怎么处理这件事吗?我只需要在VisualStudio中调试IIS Express就可以了

编辑:


我已经检查了IIS Express日志,子状态代码是2。因此,根据MSDN,401.2指的是“由于服务器配置导致登录失败”。

我也有同样的问题。短期解决方案是允许在IIS Express中进行Windows身份验证: “\Documents\IISExpress\config\applicationhost.config”

改变

<windowsAuthentication enabled="false">


详情如下:
我找到了解决这个问题的办法。在windows服务中创建web请求时,我需要显式设置凭据:

request.Credentials = CredentialCache.DefaultNetworkCredentials;
然而,我们在VS2012中从来没有这样做过,这在我看来有点像新版本的IIS Express中的一个bug

编辑: 在将每个请求发送到服务器之前,需要使用上面的行,例如:

var request = (HttpWebRequest)WebRequest.Create(url);
request.Credentials = CredentialCache.DefaultNetworkCredentials;
request.BeginGetResponse(AsyncResponseCallback, state);

我可能没有抓住要点,但Authorized属性的任务不是让匿名用户执行控制器。听说它在VS 2010/VS 2012中起作用,我很惊讶——这让我觉得你可能有安全漏洞。你是对的zespri。关于匿名部分我错了。项目的web.config文件没有任何身份验证设置,因此我假设它使用的是匿名模式。在做了一些修改之后,我意识到默认情况下它使用的是Windows身份验证。我已经更新了我的问题以反映这一点。实际上,我的全局配置文件已经将其设置为enabled:您将其放置在MVC应用程序中的何处?我应该更具体地说明代码的位置。在将请求发送到客户端的服务器之前,需要执行以下操作。我编辑了答案以反映这一点。
var request = (HttpWebRequest)WebRequest.Create(url);
request.Credentials = CredentialCache.DefaultNetworkCredentials;
request.BeginGetResponse(AsyncResponseCallback, state);