我正在尝试将我正在使用的常规旧控制器转换为 API 控制器并且遇到了一些困难。这一系列函数的作用是,在 jQuery 中,它遍历包含员工所有用户名的文件,并且对于每个用户名,它调用我的 webapi 控制器中的 PopulateEmployee 方法,该方法应该返回 JSON,然后填充结果 div。
当手动导航到 ..domain../staffinformation/populateemployee/employeeusername
我得到错误
This XML file does not appear to have any style information associated with it. The
document tree is shown below.
<Error>
<Message>
The requested resource does not support http method 'GET'.
</Message>
</Error>
请注意,它将填充的 div 是 Umbraco CMS 页面中的部分视图,我认为这不是问题,但如果你们有不同的想法,请告诉我。
webAPI路由或其他东西我必须缺少一些东西。
谢谢你的帮助。
这是代码。
请注意这个方法有 HttpPost 标签
public class StaffInformationController : ApiController
{
[System.Web.Http.ActionName("PopulateEmployee")]
[System.Web.Http.HttpPost]
public StaffListing PopulateEmployee(string id)
{
//do error checking on input
StaffListing staffListing = new StaffListing(id);
//populate other fields
return staffListing;
}
}
为 api 控制器设置的路由
public static class WebApiConfig
{
public static void Register(HttpConfiguration config)
{
config.Routes.MapHttpRoute(
name: "DefaultApi",
routeTemplate: "api/{controller}/{action}/{id}",
defaults: new { id = RouteParameter.Optional }
);
}
}
指定使用 'POST' 的 jQuery 调用,请原谅此函数中递归调用的棘手之处。
function getEmployeeObjectByIndex() {
$.ajax({
url: $('#root').val() + '/api/StaffInformation/PopulateEmployee',
type: 'POST',
async: true,
contentType: 'application/json, charset=utf-8',
data: JSON.stringify({ 'username': lines[i] }),
success: function (staffObject) {
if (!(staffObject.Name == undefined)) {
buildHtmlStrings(staffObject);
}
i++;
getEmployeeObjectByIndex(); //recursive call
}
});
}