【问题标题】:Cannot reach Action in api Web API 2 Controller in MVC 5 app无法在 MVC 5 应用程序中访问 api Web API 2 控制器中的操作
【发布时间】:2015-02-20 20:30:29
【问题描述】:

我已尝试遵循默认的 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 }
);

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) 这是我的简单 ApiController 和 1 个操作:

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

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

这是通话详情:

我在这里错过了什么?我在 Action 中设置了断点,但无法访问此代码...

【问题讨论】:

  • 尝试在 url 中为 id 添加一个值——在这种情况下你的操作会被调用吗?
  • 你试过uri = 'api/Barcode';它可能会忽略RetrieveNext并根据它的签名自动获取默认的HttpGet并给你你想要的
  • 我试过添加 id 并没有帮助。试过 uri = 'api/条形码';它不起作用。这个控制器将包含几个 [HttpGet] 动作,所以我需要能够达到我需要的确切动作
  • 怎么样骆驼套控制器如uri = 'api/barcode' 并尝试你的动作名称。在教程的一半左右,它显示了映射到 URI 的控制器方法,它们是驼峰式的
  • 我试过了……不行

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


【解决方案1】:

这有多愚蠢???我在这里找到了问题所在: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);
}

【讨论】:

    猜你喜欢
    • 2019-01-06
    • 2018-04-29
    • 1970-01-01
    • 2019-05-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-06-06
    相关资源
    最近更新 更多