ошибка в параметрах строки запроса - PullRequest
0 голосов
/ 10 января 2012

Мне нужно начать обработку URL-адреса, который будет содержать электронную почту и GUID.Что-то вроде следующего, где первый параметр - это адрес электронной почты, а второй - 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) 'в' SmartChartsMVC.Controllers.AccountController '.Необязательный параметр должен быть ссылочным типом, обнуляемым типом или быть объявлен как необязательный параметр.Имя параметра: параметры

1 Ответ

1 голос
/ 10 января 2012

У вас может быть один вопросительный знак в правильно отформатированном URL. Это то, что отделяет часть пути от строки запроса. Таким образом, URL, по которому вы пытаетесь перейти, недействителен.

Гораздо более реалистичный URL может быть следующим:

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

Также убедитесь, что ваш токен имени маршрута соответствует вашему параметру действия. В своем определении маршрута Global.asax вы использовали {mail}, тогда как в качестве аргумента действия вы используете email в качестве имени параметра. Убедитесь, что вы согласны с вашим соглашением об именах.

А если вы просто хотите, чтобы URL был таким:

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)
    {
        ...
    }

    ...
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...