我需要开始处理一个包含一些电子邮件GUID的URL。有些事情如跟随第一个参数是电子邮件地址和第二个参数是Guid。
为此,我修改了我的路由,如下所示
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 声明为可选参数。参数名称:参数
答案 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)
{
...
}
...
}