【发布时间】:2019-02-16 06:59:24
【问题描述】:
下午好。
但是,我创建了一个试图访问我的 C# 函数的 ajax 调用;我收到错误“在与请求匹配的控制器‘PortalApi’上未找到任何操作。”请求是一个帖子,并且服务器函数附加了相应的 Http 标头。函数名称和参数也都相同。
阿贾克斯
GetExtendersGridDataFromServer(requestParameters) {
extendersGridSource = null;
var gridFilterParams = JSON.stringify(requestParameters);
$.ajax(
{
async: false,
contentType: "application/json",
converters: Utills.jQueryAjaxJsondDataConverter,
data: JSON.stringify({ gridFilterParams: gridFilterParams, securityCode: securityCode }),
dataType: "jsond",
type: "POST",
url: (Utills.getBaseURL() + "/Api/PortalApi/GetExtenderGridData"),
error: function (XMLHttpRequest, textStatus, errorThrown) {
alert(XMLHttpRequest.responseText);
},
failure: function (msg) {
alert("failure");
},
success: function (msg) {
alert("success");
}
});
}
C#
[HttpPost]
public JqGridData GetExtenderGridData(string securityCode)
{
IMUserSecurity.UserSecurity.ValidateWebMethodSecurityCode(securityCode, "PortalWebService.GetExtenderGridData");
return GetDoctorGridData("extender");
}
路由配置
configuration.Routes.MapHttpRoute("API Action Default", "api/{controller}/{action}/{id}",
new
{
id = RouteParameter.Optional
});
【问题讨论】:
-
控制器类的名称是什么?
-
在路由配置中,添加一个'?'在
id之后。比如"configuration.Routes.MapHttpRoute("API Action Default", "api/{controller}/{action}/{id?}","。否则 url 中需要一个 id 值来匹配这个路由配置 -
@Clint PortalApiController
-
检查您的浏览器调试选项卡。现代浏览器将通过在发送 HTTP-POST 之前发送 HTTP-OPTION 请求来检查跨站点源策略。根据您的代码,找不到选项端点因此失败。您可以将 [HttpOption] 标记添加到端点或一起删除 [HTTPPost] 以进行测试。在 .net 中编写 WebAPI 时,您需要非常关注浏览器如何处理跨站点源策略。希望这会有所帮助
标签: c# ajax asp.net-web-api