C# ASP.NET MVC属性&;常规路由不起作用

C# ASP.NET MVC属性&;常规路由不起作用,c#,asp.net,asp.net-mvc,routing,url-routing,C#,Asp.net,Asp.net Mvc,Routing,Url Routing,我正在尝试使用常规和基于属性的路由配置路由 如果我只使用MVC附带的默认常规路线,那么一切都可以正常工作。但是如果我添加这个路由属性,我会得到一个404 以下是获取请求URL: 以下是我的RouteAttributes代码: [RoutePrefix("Home")] public class HomeController : Controller { [Route("SimpleSearch/{searchTerms}/{dateRange}/{page?}")] [Http

我正在尝试使用常规和基于属性的路由配置路由

如果我只使用MVC附带的默认常规路线,那么一切都可以正常工作。但是如果我添加这个路由属性,我会得到一个404

以下是获取请求URL:

以下是我的RouteAttributes代码:

[RoutePrefix("Home")] 
public class HomeController : Controller
{
    [Route("SimpleSearch/{searchTerms}/{dateRange}/{page?}")]
    [HttpGet]
    public ActionResult SimpleSearch(string searchTerms, DateRangeEnum dateRange, int page = 1)
    {
       //Code here
    }

}
此外,路由配置如下所示:

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

        routes.MapMvcAttributeRoutes();

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

我看不出这个RouteAttribute有什么问题,但即使它出了问题,为什么它不回到默认的常规路由并工作呢?

对于属性路由定义,您明确指定了要使用的路由模式

Home/SimpleSearch/{searchTerms}/{dateRange}/{page?}
因此,您应该尝试使用相同的url模式访问您的操作方法

这应该行得通

 http://localhost:52386/Home/SimpleSearch/test/0
Model binder将能够将
“test”
映射到
searchTerms
参数,并将0映射到
dateRange
参数


当属性路由具有不同的模式时,常规(显式使用querystring)将不起作用

这应该起作用,但事实并非如此。这也给了我一个404的错误。传统的路由在某种程度上是有效的。。因为当我删除属性routing时,普通的querystring get请求可以正常工作(带有属性route url模式的请求)应该可以工作(我只是复制并粘贴了它并验证了它)。一旦你用属性路由定义(自定义url模式)来修饰它,传统路由就不起作用了。为什么传统路由不再起作用?我正在使用这两种方法,它们都被放入路由字典中,因为我在路由配置中声明了这两种方法。不管怎样,我还是不能让它工作。我工作的唯一方法是,如果我将路由中的所有参数都设置为可选:[route(“SimpleSearch/{searchTerms?}/{dateRange?}/{page?}”)]我刚刚尝试了您的任务中的代码,它对我很好(当我尝试
mysiteName/Home/SimpleSearch/test/0
时)。