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

Bry*_*yuk 2 javascript asp.net api asp.net-mvc 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:

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

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

<a onclick="RetrieveNext();" href="#">Retrieve next</a>
Run Code Online (Sandbox Code Playgroud)

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>
Run Code Online (Sandbox Code Playgroud)

4)这是我的简单ApiController与1动作:

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

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

这是电话详情:

在此输入图像描述

我错过了什么?我在我的Action中添加了断点,但是我无法访问此代码...

Bry*_*yuk 6

这有多愚蠢??? 我发现这里有什么问题:将Web API添加到现有的MVC Web应用程序后出现404错误

它与global.asax文件有关.即使您将WEB API添加到项目中,Visual Studio也会为您打开readme.txt文件,其中提供了一些如何向global.asax文件添加几行代码的提示.关于你应该放置代码的地方没有一句话(这里确实有所不同!)

因此,从我列出的帖子中复制ablove:虽然它不适用于:

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);
} 
Run Code Online (Sandbox Code Playgroud)

它适用于:

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);
}
Run Code Online (Sandbox Code Playgroud)