当我调用包含带NO参数的post方法的webAPI控制器时,它会转到该方法.但是,当我传递参数(以及当我用参数更新api控制器)时,请参阅第一个片段下方的片段,我得到405错误,它不支持POST.
var captchURL = "/api/Captcha"; $.ajax({ url: captchURL, dataType: 'json', contentType: 'application/json', type: 'POST' }) var jsondata = {solution: "7", answer: "7"}; var captchURL = "/api/Captcha"; $.ajax({ url: captchURL, dataType: 'json', contentType: 'application/json', type: 'POST', data: JSON.stringify(jsondata) })
更新 - 控制器代码:
public class CaptchaController : ApiController { private readonly ICaptchaService _service; public CaptchaController(ICaptchaService service) { _service = service; } public Captcha Get() { return _service.Get(); } [HttpPost] public bool Post(string solution, string answer) { return _service.Post(); } }
更新 - WebApiConfig:
config.Routes.MapHttpRoute( name: "DefaultApi", routeTemplate: "api/{controller}/{id}", defaults: new { id = RouteParameter.Optional } );
是因为我没有解决方案并回答params(在我的WebApiConfig中)它不能识别它们吗?
我做错了什么?
这是设置路线的略有不同的方法,但我更喜欢它.在您的控制器代码中为每个代表GET请求POST的方法添加路由前缀和路由...
[RoutPrefix("Captcha")] public class CaptchaController : ApiController { [Route("Post/{solution}/{answer}")] [HttpPost] public bool Post(string solution, string answer) { return _service.Post(); } }
只要您正确设置路径,使用正确键入的参数并返回正确键入的值,这应该有效.如果使用模型,则不必将参数添加到路径路径中.
当我设置我的WebAPI时,这对我有用.如果有人发现任何错误的解释,请告诉我.我还在学习(而且永远都是),但只是想让你知道我做了什么工作.