#c# #asp.net #.net #asp.net-mvc #asp.net-mvc-validation
#c# #asp.net #.net #asp.net-mvc #asp.net-mvc-проверка
Вопрос:
Я пытаюсь создать атрибут ValidationAttribute (для удаленной проверки, которая работает только на стороне сервера) и внутри метода isValid мне нужно разрешить URL-адрес из значений маршрута url. Вот моя первоначальная настройка :
public class ServerSideRemoteAttribute : ValidationAttribute {
public string Controller { get; set; }
public string Action { get; set; }
public object RouteValues { get; set; }
public ServerSideRemoteAttribute(string controller, string action) {
this.Controller = controller;
this.Action = action;
}
public ServerSideRemoteAttribute(string controller, string action, object routeValues) {
this.Controller = controller;
this.Action = action;
this.RouteValues = routeValues;
}
protected override ValidationResult IsValid(object value, ValidationContext validationContext) {
//Here I need to resolve the url in order to make a call to that controller action and get the JSON result back
return base.IsValid(value, validationContext);
}
}
Есть мысли?
Ответ №1:
var httpContext = new HttpContextWrapper(HttpContext.Current);
var urlHelper = new UrlHelper(new RequestContext(httpContext, new RouteData()));
var url = urlHelper.Action(Action, Controller, RouteValues);
Комментарии:
1. большое спасибо! Это очень помогло. Разрешит ли это полный URL-адрес (например: localhost: 6738 / Home / Index /100)?
2. @tugberk, нет, он не будет преобразован в полный URL. Если вам нужен абсолютный URL-адрес, вам придется использовать соответствующую перегрузку:
var url = urlHelper.Action(Action, Controller, RouteValues, urlHelper.RequestContext.HttpContext.Request.Url.Scheme);
3. Еще раз спасибо. Я должен был посмотреть на MSDN вместо того, чтобы лениться: s