查询字符串参数错误

时间:2012-01-09 20:30:40

标签: asp.net-mvc-3 routing

我需要开始处理一个包含一些电子邮件GUID的URL。有些事情如跟随第一个参数是电子邮件地址和第二个参数是Guid。

http://www.myWebSiteurladdress.com/Account/MyActionMethod?MyEmail=me@here.com?MyId=222DF915-264E-4034-BF26-22EB1165667C

为此,我修改了我的路由,如下所示

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

    routes.MapRoute(
       "RouteABC", // Route name
       "{controller}/{action}/{mail}/{id}", // URL with parameters
       new { controller = "Account", action = "MyActionMethod", mail = string.Empty, id = Guid.Empty } // Parameter defaults
   );

    routes.MapRoute(
        "Default", // Route name
        "{controller}/{action}/{id}", // URL with parameters
        new { controller = "Home", action = "Index", id = UrlParameter.Optional } // Parameter defaults
    );
}

然后我有我的行动方法如下。

 public class AccountController : Controller
    {
        public ActionResult MyActionMethod(string email, Guid id)
        {

            ............
        }

问题是,当我继续上面的网址时,http://www.myWebSiteurladdress.com/Account/MyActionMethod?MyEmail=me@here.com?MyId=222DF915-264E-4034-BF26-22EB1165667C我收到了以下错误消息。我在这里做错了什么想法?

  

参数字典包含参数'MyId'的空条目   非可空类型'System.Guid'的方法   'System.Web.Mvc.ActionResult MyActionMethod(System.String,   System.Guid)'in'SmartChartsMVC.Controllers.AccountController'。一个   可选参数必须是引用类型,可空类型或be   声明为可选参数。参数名称:参数

1 个答案:

答案 0 :(得分:1)

您可以在格式正确的网址中添加一个问号。它是将路径部分与查询字符串分开的内容。因此,您尝试导航到的网址无效。

更真实的网址可能如下:

http://www.myWebSiteurladdress.com/Account/MyActionMethod/me@here.com/222DF915-264E-4034-BF26-22EB1165667C

还要确保您的路线名称标记与您的操作参数匹配。在您的Global.asax路由定义中,您使用了{mail},而在您的操作参数中,您使用email作为参数的名称。确保您的命名约定一致。

如果您只是想拥有这样的网址:

http://www.myWebSiteurladdress.com/Account/MyActionMethod?MyEmail=me@here.com&MyId=222DF915-264E-4034-BF26-22EB1165667C

然后您不需要添加任何自定义路由,因为默认路由足以调用以下操作:

public class AccountController : Controller
{
    public ActionResult MyActionMethod(string myEmail, Guid myId)
    {
        ...
    }

    ...
}