2015-05-15 81 views
2

我想要的网址是MVC 1个参数

domain.com/doc/{project} 

我有一个控制器称为项目或5路由“ProjectsController.cs。” 这个控制器有一个动作(ActionResult),我想用我的自定义URL路径调用“DocumentationIndex”。

DocumentationIndex确实有一个参数。这是一个简单的字符串参数。

下继续给我一个404

routes.MapRoute(
    name: "Documentation", 
    url: "doc/{project}", 
    defaults: new { controller = "Projects", action = "DocumentationIndex", project = "" } 
); 

任何人都可以点我在正确的方向?

+0

什么是异常被抛出,什么是异常的消息和什么是异常的堆栈跟踪。 –

回答

2

您可以使用属性路由到控制器中定义的:

public class ProjectsController 
{ 
    [Route("doc/{*project}")] 
    public ActionResult DocumentationIndex(string project = "") 
    { // ... } 
} 

你需要确保属性路由在您的路由配置中启用:

routes.MapMvcAttributeRoutes(); 

{*projects}中的*将确保路由参数与URL的其余部分匹配,即使它包含特殊字符。

+0

谢谢!不过,我有一个问题确实很愚蠢。如果字符串参数中有点,该怎么办?就像在“domain.com/doc/Project.v.2.1”中一样,路由似乎可以正常工作,只需一个字参数。 – Ramin

+0

查看我的更新回答。 – Richard

+0

不幸的是,*并没有什么区别。 404错误继续存在。简单的一个字没有特殊的字符串仍然工作。 – Ramin

0

试试这个:

routes.MapRoute(
    "Documentation", 
    "doc/{project}", 
    new { controller = "Projects", action = "DocumentationIndex" } 
); 

控制器代码:

public class ProjectsController ... { 
    // 
    public ActionResult DocumentationIndex(string project = "") { 
     // ... 
    } 
}