[英]Method not allowed doing a post in WebAPI
I have a controller defined as follows
using System;
using System.Collections.Generic;
using System.Linq;
using System.Net;
using System.Net.Http;
using System.Web.Http;
namespace MissingClinics.Controllers
{
[RoutePrefix("api/appointment")]
public class AppointmentController : ApiController
{
[HttpPost]
public IHttpActionResult GetMissingKeys([FromBody]String MRNList)
{
return Ok();
}
}
}
然后以下JavaScript調用該頁面。
try {
$.ajax({
type: 'POST',
url: '/api/Appointment/GetMissingKeys',
data: $('#mrnList').val(),
dataType: 'text'
}).done(function () {
alert('done!');
}).fail(function (Status, errorThrown) {
alert('Error: ' + Status.status + ' - ' + Status.statusText);
}).always(function () {
alert('All done or not');
});
}
catch (e) {
alert(e);
}
WebApi.config是以下
namespace MissingClinics
{
public static class WebApiConfig
{
public static void Register(HttpConfiguration config)
{
// Web API configuration and services
// Web API routes
config.MapHttpAttributeRoutes();
config.Routes.MapHttpRoute(
name: "DefaultApi",
routeTemplate: "api/{controller}/{id}",
defaults: new { id = RouteParameter.Optional }
);
}
}
}
RouteConfig.cs
namespace MissingClinics
{
public class RouteConfig
{
public static void RegisterRoutes(RouteCollection routes)
{
routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
routes.MapRoute(
name: "Default",
url: "{controller}/{action}/{id}",
defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
);
}
}
}
現在,因為我要傳遞大量數據,所以我需要在主體中傳遞它(而不是作為Url的一部分)。
但是在調用中它返回錯誤405-不允許使用方法。 但是從我可以看到,jQuery應該發出一個發布請求,而控制器正在接受一個發布-那么為什么不允許該Method?
使用默認的路由模板,Web API使用HTTP方法來選擇操作。 但是,您也可以創建一條路徑,其中將動作名稱包含在URI中:
routes.MapHttpRoute(
name: "ActionApi",
routeTemplate: "api/{controller}/{action}/{id}",
defaults: new { id = RouteParameter.Optional }
);
自從我使用jQuery以來已經有一段時間了,但是
這不應該嗎
data: $('#mrnList').val(),
是這個
data : {mrnList: $('#mrnList').val()}, //Or MrnList depending on your jsonformatting options
我認為dataType也應該是'json'
。
您是否嘗試過將[Route("GetMissingKeys")]
到您的方法中?
您是否已將默認路由從api/{action}
更改為api/{controller}/{action}/{id}
?
使用請求HTTP方法的ASP.NET WEB API選擇操作,有以下兩種方法:
1.更改Web API默認路由
WebApiConfig.cs
config.Routes.MapHttpRoute( name: "DefaultApi", routeTemplate: "api/{controller}/{action}/{id}", defaults: new { id = RouteParameter.Optional } );
有了這個,您不需要更改您的html文件。
2.更改動作名稱
public IHttpActionResult Post([FromBody]String MRNList)
並像這樣調用javascript:
$.ajax("/api/Appointment", {type:"POST", data:$("").val() ... }
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.