无法从AJAX发布请求中点击API控制器操作

时间:2017-05-08 19:10:37

标签: c# .net ajax asp.net-mvc asp.net-web-api

我们正在通过API调用我们的服务器端逻辑。我无法从我的AJAX调用中获取动作。任何人都可以告诉我我的代码有什么问题以及为什么我收到错误,说它无法在控制器中找到该操作?

控制器操作

[System.Web.Http.HttpPost]       
public HttpResponseMessage assignViews(string selectedViews, string volIds)
{
     return new HttpResponseMessage(HttpStatusCode.OK);
}

AJAX请求

self.saveViews = function () {

        var data = {
            selectedViews: self.selectedViews().toString(),
            volIds: populateSelectedVolIds().toString()
        };

        var jsonData = ko.toJSON(data);

        $.ajax({
            url: "../../ja/ClientView/assignViews",
            type: "POST",
            contentType: "application/json; charset=utf-8",
            cache: false,
            data: jsonData,
            success: handleViewsForClientSuccess,
            error: handleEditViewsErrors
        });
 };        

路由

public override void RegisterArea(AreaRegistrationContext context)
    {           
        RouteTable.Routes.MapHttpRoute(
            "ja",
            "ja/{controller}/{id}",
            new { action = "Index", id = UrlParameter.Optional, version = UrlParameter.Optional }
        );
    }

2 个答案:

答案 0 :(得分:0)

在路线注册中,您错过了添加动作占位符,而您已将其标记为"索引"默认情况下,这意味着您的ajax调用将尝试与ActionMethod匹配"索引"代替。尝试将其更改为

ja/{controller}/{action}/{id}

另一个原因可能是参数不匹配。

答案 1 :(得分:0)

[1]从网址中删除操作名称

请勿在您的网址中包含操作名称,因为它不属于您的路由。 HTTP动词POST将找到您的操作,因为您使用此VERB标记了您的操作,并且您的ajax请求是POST请求。你的网址应该是:

public class MyModel { public string selectedViews { get; set; } public string volIds { get; set; } }

[2]将模型用作参数

最佳做法是使用模型而不是字符串作为操作的参数。例如,您可以在代码中创建此模型:

[System.Web.Http.HttpPost]
public HttpResponseMessage assignViews(MyModel data)
{
     return new HttpResponseMessage(HttpStatusCode.OK);
}

并改变你的行动:

{{1}}