为什么要使用此Web API
{
"Version":{
"Major":1,
"Minor":1,
"Build":-1,
"Revision":-1,
"MajorRevision":-1,
"MinorRevision":-1
},
"Content":{
"Headers":[{
"Key":"Content-Type",
"Value":["text/plain; charset=utf-8"]
}]
},
"StatusCode":200,
"ReasonPhrase":"OK",
"Headers":[],
"RequestMessage":null,
"IsSuccessStatusCode":true
}
返回
hello
而不是
200 OK
Content-Type: text/plain
hello
如何让Web API返回如下所示的HTTP响应?
[HttpGet("hello")]
public string Hello()
{
return "hello";
}
我最终要做的是返回JSON和其他具有各种状态代码的格式,因此以下代码无法帮助我作为答案。
{{1}}
(我是ASP.NET和其他Microsoft技术的新手。)
答案 0 :(得分:0)
有趣,如果我在ASP.NET 4上尝试你的代码
public HttpResponseMessage Hello()
{
var res = new HttpResponseMessage(HttpStatusCode.OK);
res.Content = new StringContent("hello", Encoding.UTF8, "text/plain");
return res;
}
我得到了回应,我的期望。
标题强>
HTTP/1.1 200 OK
Cache-Control: no-cache
Pragma: no-cache
Content-Length: 5
Content-Type: text/plain; charset=utf-8
Expires: -1
Server: Microsoft-IIS/8.0
X-AspNet-Version: 4.0.30319
...
X-Powered-By: ASP.NET
Date: ...
<强>车身强>
hello
根据具体情况,您可以依靠客户端指定它可以接受的内容,也可以指定服务器以始终抛出json。
我通常有自定义请求/响应对象,我将其扔回客户端。例如
public CustomResponse Get()
{
CustomResponse response = new CustomResponse();
// some work
response.TestProperty1 = "Test Value 1";
response.TestProperty2 = "Test value 2";
return response;
}
现在,如果您的API会尊重客户接受的内容。因此,如果客户端设置请求标题&#34;接受:application / xml&#34;然后如果它的json,它将返回xml或json。请参阅下面的fiddler请求的屏幕截图。
从内存中,我认为你也可以在服务器上指定总是发送json。
希望这有帮助!
答案 1 :(得分:0)
ASP.net Web Api使用名为Content Negotiation的东西,其中客户端指定要返回的内容。
在您的情况下,您可以指定要返回text/plain
,内置内容协商应提供您想要的内容。
您尚未指定如何发出请求 - 在浏览器中手动(哪个浏览器)/通过jquery $ .ajax / .net客户端代码/等 - 以及您如何发出请求决定了如何添加该请求的accept
标头,例如:
GET http://[url] HTTP/1.1
Accept: text/plain
可以覆盖内容协商并始终返回特定类型(例如JSON),并且关于如何执行此操作有很多问题 - 主要是因为他们需要JSON但是获取xml并且不需要我知道如何申请JSON。如果您正在创建可重用的Web API,那么您应该将其留给客户端来请求他们想要的内容,这就是为什么它以这种方式构建到框架中。
答案 2 :(得分:0)
(自我回答)嗯......原因可能是我选择了
ASP.NET 5 Preview Templates
而不是
ASP.NET 4.5.2 Templates
当我尝试创建Web API时。
我想这可能是ASP.NET 5 Preview的一个错误,或者ASP.NET 5引入了另一种取代HttpResponseMessage
的新机制。
答案 3 :(得分:0)
我最近也发生了同样的事情。原因是由于某种原因,有两个对System.Net.Http.dll程序集的引用:一个来自GAC,另一个来自我的项目。
在一个有趣的情况下,您发送的HttpResponseMessage的类型与ASP.NET期望的HttpResponseMessage的类型不同,这就是为什么在处理消息时,它只是将其序列化为JSON。
为此找到的解决方案是从NuGet安装System.Net.Http包,并确保在Web.config上正确生成绑定重定向,以便仅使用一个依赖项副本。