Как я могу создать ограничение маршрута системы типов. Гуид?

Кто-либо может указать на меня в правильном направлении о том, как отобразить маршрут, который требует двух гуидов?

т.е. http://blah.com/somecontroller/someaction/{firstGuid} / {secondGuid}

где и firstGuid и secondGuid не являются дополнительными и должны быть системы типов. Гуид?

39
задан GEOCHET 9 December 2011 в 02:15
поделиться

2 ответа

Создайте RouteConstraint следующим образом:

public class GuidConstraint : IRouteConstraint {

public bool Match(HttpContextBase httpContext, Route route, string parameterName, RouteValueDictionary values, RouteDirection routeDirection)
{
    if (values.ContainsKey(parameterName))
    {
        string stringValue = values[parameterName] as string;

        if (!string.IsNullOrEmpty(stringValue))
        {
            Guid guidValue;

            return Guid.TryParse(stringValue, out guidValue) && (guidValue != Guid.Empty);
        }
    }

    return false;
}}

Далее при добавлении маршрута:

routes.MapRoute("doubleGuid", "{controller}/{action}/{guid1}/{guid2}", new { controller = "YourController", action = "YourAction" }, new { guid1 = new GuidConstraint(), guid2 = new GuidConstraint() });
48
ответ дан 27 November 2019 в 02:24
поделиться

+1 @kazimanzurrashid. Кажется, в точку.

Приведу альтернативу для тех, у кого нет C#4.0, частью которого является Guid.TryParse. Есть еще одна альтернатива с Regex, но вероятно, не стоит заморачиваться.

 public class GuidConstraint : IRouteConstraint
    {

        public bool Match(HttpContextBase httpContext, Route route, string parameterName, RouteValueDictionary values, RouteDirection routeDirection)
        {
            if (values.ContainsKey(parameterName))
            {
                string stringValue = values[parameterName] as string;

                if (!string.IsNullOrEmpty(stringValue))
                {
                    //replace with Guid.TryParse when available.
                    try
                    {
                        Guid guid = new Guid(stringValue);
                        return true;
                    }
                    catch
                    {
                        return false;
                    }


                }
            }

            return false;
        }
    }
2
ответ дан 27 November 2019 в 02:24
поделиться
Другие вопросы по тегам:

Похожие вопросы: