MVC 4路由无法找到控制器

时间:2014-04-28 16:52:09

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

我无法在我的新MVC 5应用中找到控制器路线。我一直在关注一些教程,所有内容似乎都写得很好,但是当浏览浏览器中的地址时,我总是得到:

  

找不到与请求URI匹配的HTTP资源" // localhost:50473 / api / tile"

/Controller/ProductController.cs

using System;
using System.IO;
using System.Web;
using System.Net;
using coal.Models;
using System.Linq;
using System.Text;
using System.Net.Http;
using System.Web.Http;
using System.Collections.Generic;

namespace coal.Controllers
{
    public class ProductController : ApiController
    {
        public void GetAllProducts() { }
        [HttpGet]
        public string Tiles(string urls) { }
    }
}

/App_Start/WebApiConfig.cs

namespace coal
{
    public static class WebApiConfig
    {
        public static void Register(HttpConfiguration config)
        {
            // Web API configuration and services

            // Web API routes
            config.MapHttpAttributeRoutes();

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

我知道我错过了什么,只是无法弄清楚它是什么。任何见解都会有所帮助。

由于

2 个答案:

答案 0 :(得分:6)

您的方法名称为Tiles,但您尝试点击tile

public string Tiles(string urls) { }

编辑:更新以将ProductController包含在正确的使用路径中:

此外,您的路线定义为api/{controller}/{action},您的控制器名称为ProductController。

您应使用的网址为:api/product/tiles,除非您创建的路线将Product/tiles操作映射到api/tiles路线。

并且您的路线应该类似于:

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

答案 1 :(得分:0)

您的路线映射需要允许mvc确定您正在寻找的控制器和操作方法。这可以通过两种方式完成,您可以在路线字符串中添加{controller}{action},也可以在{{1}中指定controlleraction }}

例如,您可以设置这样的路线:

defaults

然后,您的方法的网址为config.Routes.MapHttpRoute( name: "Default", routeTemplate: "api/{controller}/{action}/{id}", defaults: new { id = RouteParameter.Optional } ); ,与控制器名称“Product”和操作方法名称“tiles”匹配。

或者,您可能希望指定的URL匹配,在这种情况下,您可以执行以下操作:

http://localhost:50473/api/Product/Tiles