我正在尝试将我正在使用的常规旧控制器转换为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路由还是其他内容,我都会遗漏一些内容。
感谢您的帮助。
这是codez。
请注意,此方法具有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
}
});
}
答案 0 :(得分:0)
手动导航到该地址会引发错误,因为在手动导航时,您正在执行GET
(并且您的方法只允许POST
)。
您应该启动Fiddler并观看ajax POST
请求和响应,以了解服务器如何响应/您的请求正在进行中
答案 1 :(得分:0)
Jquery ------&gt; web api
Web API有一个属性,即 CONTENT NEGOTIATION 表示您发送任何数据并接受任何数据。
$。AJAX({
contentType: 'application/json, charset=utf-8',
//这是将数据类型json的数据发送到服务器,在这里发送任何类型的数据
accept: 'application/json',
//这是从服务器到客户端接收/获取数据... //因此,您只需提及您想要的数据类型数据,即可获得JSON数据... //如果您发送xml并且您想要json,那么只将write接受为json,它会自动转换为您需要的数据类型..来自 MediaTypeFormatter
});