目录
吐血原创,转载请注明出处!
1.WebApi 404原因和解决方案
关于404,第一个可能出现该问题的原因就是,这个APIController类没有public声明
第二个,如果routeTemplate: "api/{controller}/{action}/{id}",那么你的请求地址应该是
http://localhost:9000/api/log/Get
这里的{action},指的是同一个ApiController可以有多个Get Post方法.
第三个,如果你使用的是别的网络来访问这个接口,那么localhost应该改成本机的IP,获取本机IP的代码如下:
//获取本机IP
string IP = "";
IPHostEntry here = Dns.GetHostEntry(Dns.GetHostName());
foreach (IPAddress _ip in here.AddressList) {
if (_ip.AddressFamily.ToString().ToUpper() == "INTERNETWORK") {
IP = _ip.ToString();
break;
}
}
//本地Http服务器
string baseAddress = "http://"+ IP +":9000";
disposeable = WebApp.Start<Startup>(url: baseAddress);
第四个404的可能原因就是,你Get或Post请求,参数未上传或者上传方式错误也会导致404,未上传导致的404这个问题略过,关于服务器为何收不到参数导致404请继续往下看.
2.POST取不到参数原因和解决方案:
如上图中的代码,Get方法中是可以直接取msg参数值的,但是Post死活取不到,不管参数前加了[FromBody]还是[FromUri]又或者声明[HttpPost]都取不到,见鬼了,后来在某个群里问起这个问题,有个仁兄说他都是建模取的,然后我就瞎猫碰死耗子,建了个对象来套,就跟Dao层使用一个对象来接收参数一样,如下图
测试:
Post方法中我返回的是字符串,并且MediaTypeHeaderValue也设置了"text/html",为何这里返回的字符串会带有双引号?
解决方案,将return ""改成如下
解决方案完整代码
吐血原创,转载请注明出处!