1

我有一个这样的网址:

example.com/profile/publicview?profileKey=5

我想用路由把它缩短到这个

example.com/profile/5

我该怎么做呢?

这是我的尝试:

routes.MapRoute(
    "Profile", "Profile/{profileKey}", 
    new { controller = "Profile", action = "PublicView", profileKey ="" }
);

但他产生了这个错误:

参数字典包含“Website.Controllers.ProfileController”中方法“System.Web.Mvc.ActionResult PublicView(Int32)”的不可空类型“System.Int32”的参数“profileKey”的空条目

动作方法

public ActionResult PublicView(int profileKey)
  {
        //stuff
  }
4

4 回答 4

2

在控制器上更改 PublicView(int? profileKey)

回答评论

是的,但是由于您在路由中的默认值为 null,因此您需要处理它。否则,更改路由中的默认值。

也许

这可能无济于事,但值得一试。这是我的网站的代码:

        routes.MapRoute(
            "freebies",                                              // Route name
            "freebies/{page}",                           // URL with parameters
            new { controller = "Home", action = "Freebies", page = 1 }  // Parameter defaults
        );

和链接:

http://localhost/freebies/2

这很好用。

于 2009-08-15T14:06:45.227 回答
1

当且仅当您始终在您的 url 中包含一个整数值(如example.com/profile/ 5 )时,您的路线和操作方法就可以了。(我假设这条路线是在默认路线之上定义的)

您定义的是一个路由,如果 url 中未提供 profileKey,则默认为空字符串,并且在您的操作方法中,您尝试将此值绑定到不可为空的整数,因此如果您正在尝试示例.com/profileexample.com/profile/not-an-int这将引发您报告的异常。您的路线将为 profileKey 分配一个空字符串,但您的操作方法无法将其转换为整数。正如 Martin指出的那样,解决此问题的一种方法是使用可为空的 int 代替。另一种解决方案是在您的路由中将此值默认为整数。

如果您仍然收到错误,请确保您请求的实际 URL 是正确的并且包含 profileKey。我知道有时在使用默认的 html 和/或 url 帮助程序时,我在传递 routeValues 时犯了一个错误,最终呈现链接或发布到我所期望的以外的 url...

希望有帮助

于 2009-08-15T15:29:42.090 回答
0

那是你唯一的路线吗?如果不是,则可能是另一条路由(之前声明的)首先匹配,并且没有正确获取 profileKey 参数。

于 2009-08-15T14:16:06.200 回答
0

试试这个(未经测试的)代码

routes.MapRoute(
    "Profile", "Profile/{profileKey}", 
    new { controller = "Profile", action = "PublicView" }
);
于 2009-08-15T14:31:57.473 回答