【问题标题】:ASP.NET Web API returns code 404 with newly created ApiControllerASP.NET Web API 使用新创建的 ApiController 返回代码 404
【发布时间】:2013-03-07 20:54:30
【问题描述】:

我最近刚刚在我的 ASP.NET MVC4 项目中添加了一个名为 ServerInfoController 的新 ApiController(我已经在 Controllers 文件夹中添加了一个 ApiController)。我使用 CRUD 模板选项创建了这个;这是它的样子:

using System.Collections.Generic;
using System.Net;
using System.Net.Http;
using System.Web.Http;
using WebFrontend.Models;

namespace WebFrontend.Controllers
{
    public class ServerInfoController : ApiController
    {
        // GET api/serverinfo
        public Dictionary<string, string> Get()
        {
            var settings = GlobalStaticVars.StaticCore.LoadServerSettings("Last", "Server");

            if (settings != null)
            {
                return new Dictionary<string, string>
                                         {
                                             {"ServerIP", settings.Address},
                                             {"ServerPort", settings.Port.ToString()}

                                         };
            }
            return new Dictionary<string, string>
                                  {
                                      {"ServerIP", ""},
                                      {"ServerPort", ""}
                                  };
        }
    }
}

但是,每次我尝试在浏览器中导航到该资源时,都会收到 404 错误。我知道我的路由已正确注册,因为我的其他控制器仍然可以在 /api 端点访问。

以下是WebApiConfig.cs中配置的路由(默认路由):

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

【问题讨论】:

  • 你能显示你的 web api 路线吗?还有你打电话的网址是什么。
  • 完成。我在上面添加了它。此外,我调用的 URL 类似于 localhost:66555/api/serverinfo

标签: c# asp.net-mvc-4 asp.net-web-api


【解决方案1】:

您不需要 {action} 部分在路线中。这是默认路由:

public static void Register(HttpConfiguration config)
{
    config.Routes.MapHttpRoute(
        name: "DefaultApi",
        routeTemplate: "api/{controller}/{id}",
        defaults: new { id = RouteParameter.Optional }
    );
}

【讨论】:

  • 明白了;谢谢!通过将操作部分设置为 RouteParameter.Optional,我已经想出了类似的东西。
猜你喜欢
  • 2012-07-12
  • 1970-01-01
  • 2014-05-07
  • 1970-01-01
  • 1970-01-01
  • 2015-04-26
  • 2014-10-18
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多