当我向我的ASP.NET MVC控制器方法提交带有Content-Type:application/x-www-form-urlencoded
的HTTP POST消息时,它返回一个HTTP错误状态代码为415 Unsupported Media Type
的响应,以及响应正文:
{"Message":"The request entity's media type 'application/x-www-form-urlencoded' is not supported for this resource."}
此错误仅发生在我的生产环境中;相同的代码在我的暂存和本地开发环境中按预期工作(即方法代码执行,方法返回HTTP 200 OK或适当的错误)。
由于错误只发生在Production中,与我的其他环境使用相同的部署代码,我的猜测是这个问题是由某种环境错误引起的 - 例如,我的Production应用程序配置有问题在IIS中,或生产应用程序目录中某处的文件系统权限问题 - 但我不知道在哪里看。
我的代码
我的控制器方法:
[HttpPost]
[Route("Account/Login")]
public AccessTokenDTO Login([FromBody] AccountDTO account)
{
// (Returns an AccessTokenDTO if the credentials are good;
// otherwise throws an HttpResponseException with a 401.)
}
简单的AccountDTO类,如果重要:
public class AccountDTO
{
[Required]
public string Username { get; set; }
[Required]
public string Password { get; set; }
}
服务器HTTP响应
生产环境的意外HTTP 415错误响应包括以下HTTP标头和值:
Cache-Control: no-cache
Pragma: no-cache
Content-Type: application/json; charset=utf-8
Expires: -1
Server: Microsoft-IIS/7.5
X-AspNet-Version: 4.0.30319
X-Powered-By: ASP.NET
Date: Thu, 25 Feb 2016 16:28:16 GMT
Content-Length: 117
当请求成功时,即当我将其提交到我的暂存URL而不是我的生产URL时,会返回完全相同的标头和值集(Date
和Content-Length
值除外)。
客户端HTTP请求
除了从我的实际客户端程序调用时看到错误失败,我还使用Firefox扩展Poster提交HTTP POST并检查响应。请求URL如下所示:
https://[myserver].com/[mypath1]/[mypath2]/Account/Login
请求标题:
Content-Type: application/x-www-form-urlencoded
请求正文:
Username=my-urlencoded-username&Password=my-urlencoded-password
我的问题
ASP.NET出于什么原因返回"The request entity's media type 'application/x-www-form-urlencoded' is not supported for this resource."
错误,但仅在我的某个环境中?