我正在使用.Net 4.5中的HttpSelfHostServer,它似乎只能在我使用QueryString发送请求时确定控制器和操作。如果我使用“application / x-www-form-urlencoded”它不起作用。
这是HttpSelfHostServer代码。
private static HttpSelfHostConfiguration _config;
private static HttpSelfHostServer _server;
public static readonly string SelfHostUrl = "http://localhost:8989";
internal static void Start()
{
_config = new HttpSelfHostConfiguration(SelfHostUrl);
_config.HostNameComparisonMode = HostNameComparisonMode.Exact;
_config.Routes.MapHttpRoute(
name: "API Default",
routeTemplate: "api/{controller}/{action}",
defaults: new { action = RouteParameter.Optional },
constraints: null);
_server = new HttpSelfHostServer(_config);
_server.OpenAsync().Wait();
}
控制器代码。
public class SettingsController : ApiController
{
[HttpPost]
public bool Test(bool work)
{
return work;
}
}
以下是尝试使用
通过REST控制台访问时获得的响应Request URL: http://localhost:8989/api/Settings/Test
Request Method:POST
Status Code:404 Not Found
Request Headersview source
Accept:*/*
Accept-Encoding:gzip,deflate,sdch
Accept-Language:en-US,en;q=0.8
Cache-Control:no-cache
Connection:keep-alive
Content-Length:9
Content-Type:application/x-www-form-urlencoded
Host:localhost:8989
Origin:chrome-extension://cokgbflfommojglbmbpenpphppikmonn
Pragma:no-cache
User-Agent:Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36
(KHTML, like Gecko) Chrome/31.0.1650.63 Safari/537.36
Form Dataview parsed
work=true
Response Headersview source
Content-Length:205
Content-Type:application/json; charset=utf-8
Date:Mon, 23 Dec 2013 22:41:10 GMT
Server:Microsoft-HTTPAPI/2.0
所以,如果我将我的请求更改为帖子到下面的网址,那就可以了。
http://localhost:8989/api/Settings/Test?work=true
为什么不是Content-Type:application / x-www-form-urlencoded work?
答案 0 :(得分:2)
您的操作方法参数为bool
,这是一种简单类型。默认情况下,ASP.NET Web API会从URI路径或查询字符串填充它。这就是http://localhost:8989/api/Settings/Test?work=true
的原因。
当您在请求正文中发送它时,它不起作用,因为ASP.NET Web API默认将body绑定到复杂类型(类),因此正文将不会绑定到您的参数类型{{1} }。要让Web API绑定body中的简单类型,请更改您的操作方法。
bool
然后,你需要只发送正文中的值,就像这样。
public bool Test([FromBody]bool work)
。
答案 1 :(得分:0)
问题不在于Content-Type。其余控制台使用AJAX和CORS,请参阅http://en.wikipedia.org/wiki/Cross-origin_resource_sharing。这由请求中的Origin
http标头指示。
包含SettingsController
的服务器必须支持CORS。如果不是,AJAX请求将始终返回404。
支持CORS的最简单方法是始终在请求HTTP标头中返回Access-Control-Allow-Origin: *
。