【问题标题】:resource api not found in mvc application在 mvc 应用程序中找不到资源 api
【发布时间】:2018-10-11 15:35:55
【问题描述】:

在现有的 MVC 应用程序中,我添加了 api 支持。 添加了 api 控制器,但是当我点击 url 时它显示错误 -

找不到资源。

我试过网址 -

https://localhost:44316/api/getdata
https://localhost:44316/Test/api/getdata

TestController.cs

public class TestController : ApiController
    {
        [HttpGet]
        [Route("api/getdata")]
        public IEnumerable<string> GetData()
        {
            return new string[] { "value1", "value2" };
        }
    }

WebApiConfig.cs

public static class WebApiConfig
    {
        public static void Register(HttpConfiguration config)
        {
            config.MapHttpAttributeRoutes();

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

RouteConfig.cs

 public class RouteConfig
    {
        public static void RegisterRoutes(RouteCollection routes)
        {
            routes.IgnoreRoute("{resource}.axd/{*pathInfo}");

            routes.MapRoute(
                name: "Default",
                url: "{controller}/{action}/{id}",
                defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
            );
        }
    }

【问题讨论】:

  • 你真的调用了WebApiConfig.Register吗?

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


【解决方案1】:

如果这是一个现有的 MVC 应用程序,那么你需要注册你的 web api 路由。您需要将这行代码添加到 Global.asax.cs 以在 Application_Start 方法中注册您的 web api 路由:

GlobalConfiguration.Configure(WebApiConfig.Register);

一旦你这样做了,你的 URL 应该就可以工作了。

【讨论】:

  • 如果没有调用config.MapHttpAttributeRoutes(); 并且没有应用该方法[Route("api/getdata")] 会不会这样?
  • @Neo 它对我有用。您确定没有其他设置吗?
  • 这是 mvc applcation 不是 web api 项目,在 mvc app 到控制器文件夹中,我添加了这个新的 API 控制器,这就是我所做的
  • 我需要像这样注册到 app start 吗? GlobalConfiguration.Configure(WebApiConfig.Register);
【解决方案2】:

Route属性放错地方了,应该装饰Controller类。

试试这个:

[Route("api/[controller]")]
public class TestController : ApiController
{
    [HttpGet]
    public IEnumerable<string> GetData()
    {
        return new string[] { "value1", "value2" };
    }
}

然后拨打 Get http://localhost:XXXX/api/test

【讨论】:

  • 不是真的,你可以随意装饰控制器或动作
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-07-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多