C# WebAPI-HTTP405:错误的方法-使用JavaScript不支持使用的HTTP谓词

C# WebAPI-HTTP405:错误的方法-使用JavaScript不支持使用的HTTP谓词,c#,ajax,webapi,C#,Ajax,Webapi,我正在从远程网页发布到Azure上的Web API。我使用以下方法: $.ajax({ type: "POST", url: BaseHref + "/api/PIRknownPersons/", data: data, contentType: "application/json; charset=UTF-8", success: function (response) { //al

我正在从远程网页发布到Azure上的Web API。我使用以下方法:

    $.ajax({
        type: "POST",
        url: BaseHref + "/api/PIRknownPersons/",
        data: data,
        contentType: "application/json; charset=UTF-8",
        success: function (response) {
            //alert('Saved known ');
        },
        error: function (e) {
             //alert('Unable to save Known ' );
        }
    });
我可能错了,但看起来Azure上的远程发布被阻止了,因为当我在本地执行时,代码工作正常。是这样吗?Azure上是否有可以关闭的设置

皮尔森-

namespace TripWeb.Controllers
{
    public class PIRknownPersonsController : ApiController
    {
        private TripDB3Entities db = new TripDB3Entities();

        // POST: api/PIRknownPersons
        [ResponseType(typeof(bool))]
        public HttpResponseMessage Post([FromBody]ApiPIRknownPerson APIPIRknownPerson)
        {
            var inst = db.Institutions.Where(x => x.RemoteID == APIPIRknownPerson.RemoteID).FirstOrDefault();
            if (inst == null)
            {
                return Request.CreateErrorResponse(HttpStatusCode.Unauthorized, "Action Not Authorized");
            }

            var newPIRknownPerson = ObjectMapper.GetEfApiPIRknownPerson(APIPIRknownPerson);

            try
            {
                db.PIRknownPersons.Add(newPIRknownPerson);
                db.SaveChanges();
                return Request.CreateResponse<bool>(HttpStatusCode.OK, true);
            }
            catch (Exception ex)
            {
                return Request.CreateErrorResponse(HttpStatusCode.BadRequest, ex.Message);
            }
        }

    }
}
命名空间TripWeb.Controller
{
公共类PirKnownPersonController:ApiController
{
私有TripDB3Entities db=新TripDB3Entities();
//职位:api/PirnownPersons
[响应类型(类型(bool))]
公共HTTPResponseMessagePost([FromBody]ApiPIRknownPerson ApiPIRknownPerson)
{
var inst=db.Institutions.Where(x=>x.RemoteID==APIPIRknownPerson.RemoteID).FirstOrDefault();
如果(inst==null)
{
返回请求.CreateErrorResponse(HttpStatusCode.Unauthorized,“操作未授权”);
}
var newpirnownperson=ObjectMapper.GetEfApiPIRknownPerson(APIPIRknownPerson);
尝试
{
db.pirnownperson.Add(newpirnownperson);
db.SaveChanges();
return Request.CreateResponse(HttpStatusCode.OK,true);
}
捕获(例外情况除外)
{
返回请求.CreateErrorResponse(HttpStatusCode.BadRequest,ex.Message);
}
}
}
}

我发现了问题——或者至少我让它工作了。我做了两件事:

  • 通过控制面板在Azure上启用CORS
  • [System.Web.Http.AcceptVerbs(“GET”、“POST”)]
    附加到我的控制器文件的顶部

不知道是否需要两者,但它现在仍然可以工作。

看起来您正在从服务器返回405-验证您没有点击
GET
(或
POST
以外的任何类型)endpoint?向我们展示
PIRknownPersons
操作的代码。@HereticMonkey-根据请求添加了代码您的webapi路由配置是什么?请原谅-不确定从哪里可以得到?当帖子来自同一台服务器时,API可以很好地工作