.net从某个服务器获取请求时发出400个错误请求

时间:2015-11-10 07:21:47

标签: asp.net-mvc powershell windows-server-2012 iis-8

如果我在我的计算机上以用户DOMAIN\automatic的方式运行IE,则网址有效:

right click IE
shift + right click "Internet Explorer" in the menu
run as different user

打开网址http://server/ClearCache时没有问题。

当我对powershell执行相同操作并再次以DOMAIN\automatic运行时,将运行以下脚本:

$url = "http://server/ClearCache"
$req = [system.Net.WebRequest]::Create($url)
$req.UseDefaultCredentials = $true
$res = $req.GetResponse() 
$res

路径ClearCache在控制器中有[AllowAnonymous]

当我以用户DOMAIN\automatic登录到需要运行powershell脚本(sql server agent job step)并在powershell中运行脚本的远程桌面服务器时,我得到:

  

异常调用" GetResponse"用" 0"参数:"遥控器   服务器返回错误:(400)错误请求。"在行:1个字符:1   + $ res = $ req.GetResponse()   + ~~~~~~~~~~~~~~~~~~~~~~~~~       + CategoryInfo:NotSpecified:(:) [],MethodInvocationException       + FullyQualifiedErrorId:WebException

在IE中打开网址会给我回复400 Bad Request。

这似乎与服务器上的IE配置文件有关,因为服务器上的Chrome可以打开网址。

是否有人知道我需要更改选项范围内的reg键或设置以使其工作?

感谢您阅读我的问题。

[UPDATE]

尝试在我的凭据下运行时,我仍然会收到400错误,所以不要认为是因为身份验证:

$url = "http://server/ClearCache"
$req = [system.Net.WebRequest]::Create($url)
# $req.UseDefaultCredentials = $true
$passwd = ConvertTo-SecureString "password" -AsPlainText -Force;
$req.Credentials = New-Object System.Management.Automation.PSCredential ("myAccount", $passwd);
$res = $req.GetResponse() 
$res

1 个答案:

答案 0 :(得分:0)

不确定问题是什么或为什么它在Chrome中有效但不在IE中。由于响应主体(当你按F12时可以看到IE devtools中的响应主体)说“主机名无效”我尝试在C:\Windows\System32\drivers\etc\hosts中添加一些DNS绑定,如127.0.0.1 myserver并取消注释localhost但没有结果

最后用ip地址替换服务器名称并解决了它(xxx是ip地址的数量):

$url = "http://xxx.xxx.xxx.xxx/ClearCache"