首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >来自Ajax的MVC Web Api调用以404响应

来自Ajax的MVC Web Api调用以404响应
EN

Stack Overflow用户
提问于 2018-06-01 03:47:34
回答 2查看 202关注 0票数 0

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

我的问题是我不能从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);
    }

这是我在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 }
        );
    }

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

这是我在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:

我必须提到-on的目的--我没有在Visual Studio中使用WebApi模板启动一个新项目,而是启动了一个MVC项目,然后安装了所有NuGet WebApi必需的包和配置(可能我遗漏了什么,不知道)。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-06-01 06:06:43

好的,在解决了我的问题之后,我会回答我自己的问题。

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

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

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

票数 0
EN

Stack Overflow用户

发布于 2018-06-01 04:07:12

更改编辑:基于注释

[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);
            }
        });
    });
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50631738

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档