0

当我张贴此请求http://localhost:61679/api/Login传递字符串参数网页API Post方法时415

Headers => Content-Type: text/plain 
Body =>  grant_type=password&username=doug&password=12345 

我得到415 Unsupported Media Type

HTTP/1.1 415 Unsupported Media Type 
Cache-Control: no-cache 
Pragma: no-cache 
Content-Type: application/json; charset=utf-8 
Expires: -1 
Server: Microsoft-IIS/10.0 
X-AspNet-Version: 4.0.30319 
X-SourceFiles: =?UTF-8?B?QzpcZGV2ZWxvcG1lbnRcYml0Y29pblxwYXltZW50cy1zZXJ2aWNlLW5vLWNoZWNrc3VtLW5vLXVzZXJcUGF5bWVudHNTZXJ2aWNlXGFwaVxBdXRoZW50aWNhdGU=?= 
X-Powered-By: ASP.NET 
Date: Mon, 28 Dec 2015 16:58:36 GMT 
Content-Length: 900 

{"Message":"The request entity's media type 'text/plain' is not supported for this resource.","ExceptionMessage":"No MediaTypeFormatter is available to read an object of type 'String' from content with media type 'text/plain'.","ExceptionType":"System.Net.Http.UnsupportedMediaTypeException","StackTrace":" at System.Net.Http.HttpContentExtensions.ReadAsAsync[T](HttpContent content, Type type, IEnumerable`1 formatters, IFormatterLogger formatterLogger, CancellationToken cancellationToken)\r\n at System.Net.Http.HttpContentExtensions.ReadAsAsync(HttpContent content, Type type, IEnumerable`1 formatters, IFormatterLogger formatterLogger, CancellationToken cancellationToken)\r\n at System.Web.Http.ModelBinding.FormatterParameterBinding.ReadContentAsync(HttpRequestMessage request, Type type, IEnumerable`1 formatters, IFormatterLogger formatterLogger, CancellationToken cancellationToken)"} 

控制器:

// POST api/Login 
    public HttpResponseMessage Post([FromBody]string loginDetails) 
    { 
     // process loginDetails here 
    } 
+1

只是好奇 - 为什么你会在你的控制器接受一个字符串,但它看起来像你传递一个compl前对象? –

+0

身体中的字符串应引用。 Content-Type应该是application/json。 http://stackoverflow.com/a/41114909/4854931 – Alex78191

回答

3

你必须设置你的Content-Type:application/json;字符集= UTF-8而不是文本/无格式

必须创建一个视图模型

public class LoginDetails{ 
public string grant_type{get;set;} 
public string username{get;set;} 
public string password{get;set;} 
} 

您的动作结果像

public HttpResponseMessage Post(LoginDetails loginDetails) 
在请求时间

你的身体像

{ 
    "grant_type":"...", 
    "username":".....", 
    "password":"....." 
}