来自 Ajax 的 MVC Web Api 调用以 404 响应
MVC Web Api call from Ajax responds with 404
我知道这个问题已经被问过很多次了,但我真的很沮丧,因为 none 我能找到的建议对我有用,我真的被困住了。
我的问题是我无法从 ajax 调用网络 Api,无论 configurations/combinations/whatever 的路线和我尝试的一切,none他们中的一些有效,我只得到 404。
这是我的 Global.asax 文件:
protected void Application_Start()
{
AreaRegistration.RegisterAllAreas();
FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);
RouteConfig.RegisterRoutes(RouteTable.Routes);
BundleConfig.RegisterBundles(BundleTable.Bundles);
GlobalConfiguration.Configure(WebApiConfig.Register);
}
这是我在 App_Start 文件夹中的 WebApiConfig.cs:
public static void Register(HttpConfiguration config)
{
// Web API configuration and services
// Configure Web API to use only bearer token authentication.
config.SuppressDefaultHostAuthentication();
config.Filters.Add(new HostAuthenticationFilter(OAuthDefaults.AuthenticationType));
// Web API routes
config.MapHttpAttributeRoutes();
config.Routes.MapHttpRoute(
name: "DefaultApi",
routeTemplate: "api/{controller}/{id}",
defaults: new { id = RouteParameter.Optional }
);
}
这是我的用户控制器class:
public class UserController : ApiController
{
public IHttpActionResult GetUserDataById(string id)
{
Clients jsonData = Http.downloadJsonData<Clients>(InsuranceGlobal.clientsUrl);
Client user = jsonData.clients.Where(u => u.id == id).FirstOrDefault();
return Ok(user);
}
}
这是我在 cshtml javascript 部分中的 Ajax 调用:
$("#btnGetUserById").click(function () {
$('#userByName').empty();
$("#gettingByIdMsg").text(" Getting User...");
$.ajax({
url: '../api/User',
type: "GET",
contentType: "application/json",
dataType: "json",
data: { id: $("#userId").val() },
success: function (data) {
$('<tr>', { html: formatItem(data) }).appendTo($('#userByName'));
$("#usersTable").removeClass("hidden");
$("#gettingByIdMsg").text("");
},
fail: function (jqXHR, textStatus) {
$("#gettingByIdMsg").text("Request failed: " + textStatus);
}
});
});
我尝试使用 [HttpPost] 装饰器进行 GET 和 POST 都没有用。
我想我已经安装了所有必要的 Web Api NuGet 包并且应用程序编译没有错误,但是没有调用 Web api。
请帮忙。
编辑 1:
我必须提一下 - 故意 - 我没有在 Visual Studio 中使用 WebApi 模板启动新项目,而是启动了一个 MVC 项目,然后安装了所有 NuGet WebApi 必要的包和配置(可能是我遗漏了什么,不知道)。
改变
编辑:基于评论
[RoutePrefix("api/User")]
public class UserController : ApiController
{
[Route("getbyid/{id}")]
public IHttpActionResult GetUserDataById(string id)
{
Clients jsonData = Http.downloadJsonData<Clients> InsuranceGlobal.clientsUrl);
Client user = jsonData.clients.Where(u => u.id ==
id).FirstOrDefault();
return Ok(user);
}
}
和客户
$("#btnGetUserById").click(function () {
$('#userByName').empty();
$("#gettingByIdMsg").text(" Getting User...");
$.ajax({
url: '/api/User/getbyid/' + id: $("#userId").val(),
type: "GET",
success: function (data) {
$('<tr>', { html: formatItem(data) }).appendTo($('#userByName'));
$("#usersTable").removeClass("hidden");
$("#gettingByIdMsg").text("");
},
fail: function (jqXHR, textStatus) {
$("#gettingByIdMsg").text("Request failed: " + textStatus);
}
});
});
好的,解决我的问题后我会回答我自己的问题。
首先我要感谢大家的回复。喜欢这个社区,这里的人都很好。
潜入深海后...我的解决方案配置出错并与之斗争了很多我记得我以前安装过 WebApi.Owin 软件包并且只是为了尝试我决定卸载它只留下 AspNet.WebApi 瞧,现在 WebApi 调用正常了。
我希望所有这些努力对以后遇到类似问题的其他人有所帮助。
我知道这个问题已经被问过很多次了,但我真的很沮丧,因为 none 我能找到的建议对我有用,我真的被困住了。
我的问题是我无法从 ajax 调用网络 Api,无论 configurations/combinations/whatever 的路线和我尝试的一切,none他们中的一些有效,我只得到 404。
这是我的 Global.asax 文件:
protected void Application_Start()
{
AreaRegistration.RegisterAllAreas();
FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);
RouteConfig.RegisterRoutes(RouteTable.Routes);
BundleConfig.RegisterBundles(BundleTable.Bundles);
GlobalConfiguration.Configure(WebApiConfig.Register);
}
这是我在 App_Start 文件夹中的 WebApiConfig.cs:
public static void Register(HttpConfiguration config)
{
// Web API configuration and services
// Configure Web API to use only bearer token authentication.
config.SuppressDefaultHostAuthentication();
config.Filters.Add(new HostAuthenticationFilter(OAuthDefaults.AuthenticationType));
// Web API routes
config.MapHttpAttributeRoutes();
config.Routes.MapHttpRoute(
name: "DefaultApi",
routeTemplate: "api/{controller}/{id}",
defaults: new { id = RouteParameter.Optional }
);
}
这是我的用户控制器class:
public class UserController : ApiController
{
public IHttpActionResult GetUserDataById(string id)
{
Clients jsonData = Http.downloadJsonData<Clients>(InsuranceGlobal.clientsUrl);
Client user = jsonData.clients.Where(u => u.id == id).FirstOrDefault();
return Ok(user);
}
}
这是我在 cshtml javascript 部分中的 Ajax 调用:
$("#btnGetUserById").click(function () {
$('#userByName').empty();
$("#gettingByIdMsg").text(" Getting User...");
$.ajax({
url: '../api/User',
type: "GET",
contentType: "application/json",
dataType: "json",
data: { id: $("#userId").val() },
success: function (data) {
$('<tr>', { html: formatItem(data) }).appendTo($('#userByName'));
$("#usersTable").removeClass("hidden");
$("#gettingByIdMsg").text("");
},
fail: function (jqXHR, textStatus) {
$("#gettingByIdMsg").text("Request failed: " + textStatus);
}
});
});
我尝试使用 [HttpPost] 装饰器进行 GET 和 POST 都没有用。
我想我已经安装了所有必要的 Web Api NuGet 包并且应用程序编译没有错误,但是没有调用 Web api。
请帮忙。
编辑 1:
我必须提一下 - 故意 - 我没有在 Visual Studio 中使用 WebApi 模板启动新项目,而是启动了一个 MVC 项目,然后安装了所有 NuGet WebApi 必要的包和配置(可能是我遗漏了什么,不知道)。
改变 编辑:基于评论
[RoutePrefix("api/User")]
public class UserController : ApiController
{
[Route("getbyid/{id}")]
public IHttpActionResult GetUserDataById(string id)
{
Clients jsonData = Http.downloadJsonData<Clients> InsuranceGlobal.clientsUrl);
Client user = jsonData.clients.Where(u => u.id ==
id).FirstOrDefault();
return Ok(user);
}
}
和客户
$("#btnGetUserById").click(function () {
$('#userByName').empty();
$("#gettingByIdMsg").text(" Getting User...");
$.ajax({
url: '/api/User/getbyid/' + id: $("#userId").val(),
type: "GET",
success: function (data) {
$('<tr>', { html: formatItem(data) }).appendTo($('#userByName'));
$("#usersTable").removeClass("hidden");
$("#gettingByIdMsg").text("");
},
fail: function (jqXHR, textStatus) {
$("#gettingByIdMsg").text("Request failed: " + textStatus);
}
});
});
好的,解决我的问题后我会回答我自己的问题。
首先我要感谢大家的回复。喜欢这个社区,这里的人都很好。
潜入深海后...我的解决方案配置出错并与之斗争了很多我记得我以前安装过 WebApi.Owin 软件包并且只是为了尝试我决定卸载它只留下 AspNet.WebApi 瞧,现在 WebApi 调用正常了。
我希望所有这些努力对以后遇到类似问题的其他人有所帮助。