【问题标题】:Unable to call web api POST action无法调用 web api POST 操作
【发布时间】:2014-10-14 07:08:49
【问题描述】:

以下是我的 web api 相关帖子/保存记录:

var c = $.ajax({
    url: 'api/values/CreateAjaxNew',
    type: 'POST',
    dataType: 'json',
    contentType: 'application/json; charset=utf-8',
    data: form.serializeArray(),
    success: function (data) {
        alert(data);
        $("#msg").html("Saved Successfully.");
        $("#msg").css("color", "green");
        //window.location = "index";
        //alert("in success");
    },
    error: function (e1, e2, e3) { alert(e3); }
});

问题:它只是给我错误Not Found

值控制器 API:

[HttpPost]
public HttpResponseMessage CreateAjaxNew(ProductViewModel vm)
{
    try
    {
        // TODO: Add insert logic here
        //manager.ProductManager m = new manager.ProductManager();
        using (aRef.ServiceIntf2Client r = new aRef.ServiceIntf2Client())
        {
            r.InsertProduct(new common.DTO.ProductDTO() { Id = vm.Id, ProductName = vm.ProductName, Description = vm.Description, Cost = vm.Cost, ProductTypeId = vm.ProductTypeId });
        }
        //m.InsertProduct(new common.DTO.ProductDTO() { Id = vm.Id, ProductName = vm.ProductName, Description = vm.Description, Cost = vm.Cost, ProductTypeId = vm.ProductTypeId });
        return Request.CreateResponse(HttpStatusCode.OK,true);
    }
    catch 
    {
        return Request.CreateResponse(HttpStatusCode.InternalServerError, false);
    }
}

请指导我如何解决此问题,请求访问 api 操作。

路线如下:

config.Routes.MapHttpRoute(
    name: "DefaultApi",
    routeTemplate: "api/{controller}/{id}",
    defaults: new { id = RouteParameter.Optional }
);

config.Routes.MapHttpRoute("DefaultApiGet",
    "api/{controller}",
    new { action = "AllProductTypes" },
    new { httpMethod = new HttpMethodConstraint(HttpMethod.Get) });
config.Routes.MapHttpRoute("DefaultApiGet1",
    "api/{controller}",
    new { action = "GetAllProducts" },
    new { httpMethod = new HttpMethodConstraint(HttpMethod.Get) });

config.Routes.MapHttpRoute("DefaultApiGetWithId",
    "api/{controller}/{id}",
    new { id = RouteParameter.Optional, action = "Get" },
    new { id = @"\d+" });

config.Routes.MapHttpRoute("DefaultApiWithAction",
    "api/{controller}/{action}");

config.Routes.MapHttpRoute("DefaultApiWithActionAndId",
    "api/{controller}/{action}/{id}",
    new { id = RouteParameter.Optional },
    new { id = @"\d+(_\d+)?" });

【问题讨论】:

  • 你可以在asp.net web api中发布你的路由配置吗..你不需要指定动作方法名称
  • @satish 更新了包含路线详情的问题。

标签: ajax asp.net-mvc-4 asp.net-web-api


【解决方案1】:

路线排序似乎是错误的。您需要先将默认路由移到最后一个更通用的路由。

http://richarddingwall.name/2008/08/09/three-common-aspnet-mvc-url-routing-issues/

到目前为止,api/{controller}/{id} 默认路由已被执行,但未找到控制器。

  config.Routes.MapHttpRoute("DefaultApiGet",
                       "api/{controller}",
                       new { action = "AllProductTypes" },
                       new { httpMethod = new HttpMethodConstraint(HttpMethod.Get) });
    config.Routes.MapHttpRoute("DefaultApiGet1",
                       "api/{controller}",
                       new { action = "GetAllProducts" },
                       new { httpMethod = new HttpMethodConstraint(HttpMethod.Get) });

    config.Routes.MapHttpRoute("DefaultApiGetWithId",
                                "api/{controller}/{id}",
                                new { id = RouteParameter.Optional, action = "Get" },
                                new { id = @"\d+" });


    config.Routes.MapHttpRoute("DefaultApiWithAction",
                        "api/{controller}/{action}");

    config.Routes.MapHttpRoute("DefaultApiWithActionAndId",
                        "api/{controller}/{action}/{id}",
                        new { id = RouteParameter.Optional },
                        new { id = @"\d+(_\d+)?" });
   config.Routes.MapHttpRoute(
        name: "DefaultApi",
        routeTemplate: "api/{controller}/{id}",
        defaults: new { id = RouteParameter.Optional }
    );

这个排序应该可以解决问题。希望这会有所帮助

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-06-11
    • 1970-01-01
    • 1970-01-01
    • 2019-07-02
    • 2013-03-10
    • 2019-08-23
    相关资源
    最近更新 更多