我有一个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'."}**
答案 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/ForumApi
到http://localhost:1900/api/ForumApi/AddForumPost
,与其他网址一样明智