javascript - 无法在 MVC 5 应用程序的 api Web API 2 Controller 中访问 Action

标签 javascript asp.net asp.net-mvc api asp.net-mvc-5

我尝试遵循默认的 Web API 教程:http://www.asp.net/web-api/overview/getting-started-with-aspnet-web-api/tutorial-your-first-web-api

这是我做的:

1) 我在我的 WebApiConfig 中添加了 Action 路由:

config.Routes.MapHttpRoute(
   name: "ActionApi",
   routeTemplate: "api/{controller}/{action}/{id}",
   defaults: new { id = RouteParameter.Optional }
);

2) 我通过客户端 javascript 调用在我的导航栏上添加了一个链接:

<a onclick="RetrieveNext();" href="#">Retrieve next</a>

3)这是我的观点:

<div class="row">
    <div class="col-md-4">
        <h2>Next barcode</h2>
        <p id="barcode">
            No available barcode
        </p>
    </div>
</div>

<script>
    var uri = 'api/Barcode';

    $(document).ready(function () {
    });

    function RetrieveNext() {
        uri = 'api/Barcode/RetrieveNext';
        $.getJSON(uri)
            .done(function (data) {
                $('#barcode').text(data);
            })
            .fail(function (jqXHR, textStatus, err) {
                $('#barcode').text('Error: ' + err);
            });
    }
</script>

4) 这是我的带有 1 个操作的简单 ApiController:

public class BarcodeController : ApiController
{
    [HttpGet]
    public IHttpActionResult RetrieveNext()
    {
        string barcode = "123456";
        if (barcode == null)
        {
        return NotFound();
            }
        return Ok(barcode);
    }
}

当我点击我的链接时,我得到: Error: Not Found 在我的 <p id="barcode"> 中,这意味着 JavaScript 可以工作,但没有调用 Action。

这是通话详情:

enter image description here

我错过了什么?我在我的 Action 中放置了断点,但我无法访问这段代码...

最佳答案

这有多蠢???我在这里发现了问题所在:404 error after adding Web API to an existing MVC Web Application

与global.asax文件有关。即使您将 WEB API 添加到您的项目中,visual studio 也会为您打开 readme.txt 文件,并提供一些提示如何将几行代码添加到您的 global.asax 文件中。没有一个字是关于你应该把你的代码放在哪里的(这里真的很重要!)

所以,从上面列出的帖子中复制: 虽然它不适用于:

protected void Application_Start()
{
    AreaRegistration.RegisterAllAreas();
    FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);
    RouteConfig.RegisterRoutes(RouteTable.Routes);
    GlobalConfiguration.Configure(WebApiConfig.Register); //I AM THE 4th
    BundleConfig.RegisterBundles(BundleTable.Bundles);
} 

适用于:

protected void Application_Start()
{
    AreaRegistration.RegisterAllAreas();
    GlobalConfiguration.Configure(WebApiConfig.Register); //I AM THE 2nd
    FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);
    RouteConfig.RegisterRoutes(RouteTable.Routes);
    BundleConfig.RegisterBundles(BundleTable.Bundles);
}

关于javascript - 无法在 MVC 5 应用程序的 api Web API 2 Controller 中访问 Action,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27607808/

相关文章:

javascript - Cypress :如何针对 window.fetch POST 请求正文的内容进行断言?

asp.net - 使用asp.net中的web api通过http进行身份验证

c# - 在asp.net MVC中获取第三个参数

asp.net-mvc - 为什么我的 asp.net mvc 表单是 POSTing 而不是 GETting?

c# - ASP.NET 网站需要多线程吗?

c# - 依赖注入(inject)。为 ASP.NET vNext 做准备

javascript - 使用 JS 变量作为参数调用更改时的 JS 函数

javascript - 'paste' 事件上的 jquery 自动完成

javascript - 假设所使用的算法在数学上是正确的,如何使用一个 For 循环在 Javascript 中编写阿姆斯特朗数?

javascript - 从 gridview RowCommand 调用 Javascript 函数