Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ajax/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
来自Ajax的MVCWebAPI调用以404响应_Ajax_Asp.net Web Api_Http Status Code 404 - Fatal编程技术网

来自Ajax的MVCWebAPI调用以404响应

来自Ajax的MVCWebAPI调用以404响应,ajax,asp.net-web-api,http-status-code-404,Ajax,Asp.net Web Api,Http Status Code 404,我知道这已经被问了几十次了,但我真的很沮丧,因为我能找到的任何建议都不适合我,我真的被卡住了 我的问题是,我无法从ajax调用Web Api,无论是什么配置/组合/任何路由,无论我尝试了什么,它们都不起作用,我只得到了404 这是我的Global.asax文件: protected void Application_Start() { AreaRegistration.RegisterAllAreas(); FilterConfig.RegisterGlo

我知道这已经被问了几十次了,但我真的很沮丧,因为我能找到的任何建议都不适合我,我真的被卡住了

我的问题是,我无法从ajax调用Web Api,无论是什么配置/组合/任何路由,无论我尝试了什么,它们都不起作用,我只得到了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);
    }
这是我的WebApiConfig.cs in App_Start文件夹:

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 }
        );
    }
这是我的UserController类:

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);
    }
}
公共类用户控制器:ApiController
{
公共IHttpActionResult GetUserDataById(字符串id)
{
客户端jsonData=Http.downloadJsonData(InsuranceGlobal.clientsUrl);
Client user=jsonData.clients.Where(u=>u.id==id.FirstOrDefault();
返回Ok(用户);
}
}
这是我在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);
            }
        });
    });
$(“#btnGetUserById”)。单击(函数(){
$('#userByName').empty();
$(“#gettingByIdMsg”).text(“Getting User…”);
$.ajax({
url:“../api/User”,
键入:“获取”,
contentType:“应用程序/json”,
数据类型:“json”,
数据:{id:$(“#userId”).val()},
成功:功能(数据){
$('',{html:formatItem(data)}).appendTo($('#userByName'));
$(“#usersTable”).removeClass(“隐藏”);
$(“#gettingByIdMsg”).text(“”);
},
失败:函数(jqXHR,textStatus){
$(“#gettingByIdMsg”).text(“请求失败:+textStatus”);
}
});
});
我尝试了使用[HttpPost]装饰程序来获取和发布,但没有结果

我想我已经安装了所有必要的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);
    }
}
[RoutePrefix(“api/用户”)]
公共类用户控制器:ApiController
{
[路由(“getbyid/{id}”)]
公共IHttpActionResult GetUserDataById(字符串id)
{
客户端jsonData=Http.downloadJsonData InsuranceGlobal.clientsUrl);
Client user=jsonData.clients.Where(u=>u.id==
id).FirstOrDefault();
返回Ok(用户);
}
}
和客户

$("#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);
            }
        });
    });
$(“#btnGetUserById”)。单击(函数(){
$('#userByName').empty();
$(“#gettingByIdMsg”).text(“Getting User…”);
$.ajax({
url:'/api/User/getbyid/'+id:$(“#userId”).val(),
键入:“获取”,
成功:功能(数据){
$('',{html:formatItem(data)}).appendTo($('#userByName'));
$(“#usersTable”).removeClass(“隐藏”);
$(“#gettingByIdMsg”).text(“”);
},
失败:函数(jqXHR,textStatus){
$(“#gettingByIdMsg”).text(“请求失败:+textStatus”);
}
});
});

好的,解决我的问题后,我会回答我自己的问题

首先,我要感谢所有的回复。我爱这个社区,这里的人很好

潜入深海后。。。我记得我以前安装过WebApi.Owin包,为了尝试,我决定卸载它,只留下AspNet.WebApi和voilá,现在WebApi调用可以工作了


我希望所有这些努力都能帮助将来遇到类似问题的其他人。

api未定义,因此您将无法找到404。。将api方法名称更改为
Get(string id)
或使用
[Route(“getbyId”)装饰您的api
并将您的客户机更改为使用
/api/user/getbyId
,就像您使用
MapAttributeRoutes
一样。我几乎尝试了所有的可能性。但是我发现这个代码没有任何问题。可能是您可以清理并重新构建解决方案。在我身上发生过很多次,使用相同的路径,我先得到404,您以前错过了一个“/”Id参数在客户端你错过了。但是你需要弄清楚为什么发布的代码不起作用。谢谢你的回复。我按照建议修改了方法的头:[Route(“getbyid/{id}”)],并根据建议更改了url,但结果相同,什么也没发生。如果我在firefox中查看网络选项卡,我会看到url为404。我忘了在控制器级别添加
RoutePrefix
。请查看我的编辑。我的结论是,在创建解决方案之后,我添加了所有必要的WebApi NuGet包,而不是模板,可能我遗漏了一些东西。我有WebApi.Owin和AspNet.WebApi以及必需的依赖项,但可能缺少一些东西。我搞不懂。