一个Controller中的多个HttpPost方法无法在Web Api中工作

时间:2015-03-14 09:48:42

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

我有一个Web Api项目,首先我用一个HttpPost方法创建了一个控制器然后它工作正常。但是,当我添加另一个HttpPost方法没有人工作,但当我删除任何一个是工作。我的代码是。

Web Api控制器:

 public class ForumPost
    {
        public int ProjectId { get; set; }
        public int CourseId { get; set; }
        public int SubjectId { get; set; }
        public int TopicId { get; set; }
        public int ContentId { get; set; }
        public string Heading { get; set; }
        public string Description { get; set; }
        public int UserId { get; set; }          
    }

    [HttpPost]
    [ActionName("AddForumPost")]
    public string AddForumPost([FromBody]ForumPost _ForumPost)
    {
        string strResult = "N";
        using (ICA.LMS.Service.Models.Entities db = new Entities())
        {

        }
        return strResult;
    }

    public class Comment
    {
        public int ForumId {get;set;}
        public string Response { get; set; }
        public int ParentId { get; set; }
        public int LevelId { get; set; }
        public string CreatedBy { get; set; }
    }

    [HttpPost]
    [ActionName("AddComment")]
    public string AddComment([FromBody]Comment cmt)
    {
        string strResult = "N";
        using (ICA.LMS.Service.Models.Entities db = new Entities())
        {

        }
        return strResult;
    }    

Jquery Calling:

var comment = { ForumId: fId, Response: res, ParentId: pId, LevelId: lId, CreatedBy: uId };

jQuery.support.cors = true;
$.ajax({        
    url: 'http://localhost:1900/api/ForumApi',
    type: 'Post',
    contentType: 'application/x-www-form-urlencoded; charset=UTF-8',
    data:comment,
    dataType: 'json',
    async: false,
    success: function (data) {
        var efId = $('#EncForumId').val();
        if (data == "Y")
            location.replace('../Forum/ForumDiscussion?id=' + efId);
        else
            myAlert('Unable to Post. Try again!');
    },
    error: function (e) {
        myAlert(JSON.stringify(e));
    }
});

错误: -

**{"readyState":0,"status":0,"statusText":"NetworkError: Failed to execute 'send' on 'XMLHttpRequest': Failed to load 'http://localhost:1900/api/ForumApi'."}**

1 个答案:

答案 0 :(得分:1)

默认情况下,web api路由是

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

正如您将注意到路线中没有任何动作。

web api根据HTTP Verb和动作名称选择动作。您可以保留操作名称POST或使用注释HttpPost,也可以保留以POST(PostComment)开头的操作名称

要克服这个问题,如果你必须通过动作名称进行路由,你可以添加一个像这样的新路线

routes.MapHttpRoute(
    name: "ActionApi",
    routeTemplate: "api/{controller}/{action}/{id}",
    defaults: new { id = RouteParameter.Optional }
);

现在任何符合此api/{controller}/{action}/{id}模式的请求都将被此路由捕获,并将传递给相应的操作。

您可以阅读有关此here的更多信息  此外,您必须立即更改您呼叫的网址,以便它们与新添加的路由匹配 从http://localhost:1900/api/ForumApihttp://localhost:1900/api/ForumApi/AddForumPost,与其他网址一样明智