2015-06-25 3 views
0

У меня есть метод результата действия, который внутри выполняет перенаправление (url). Мой вопрос: как я могу проверить, что URL-адрес действителен до того, как я переадресую?Перенаправление на url в ASP MVC

public ActionResult RedirectUser() 
{ 
    var url = "/Cars/Model/1"; //this is the url 

    // now i should check if the redirect return a 200 code (the url is valid) and if is valid I should redirect to that url, else i should redirect to "/Home/Index" 

    if(this.Redirect(url)) 
    { 
     return this.Redirect(url); 
    } 
    else 
    { 
     return this.RedirectToAction("Index", "Home"); 
    } 

    return this.RedirectToAction("Index", "Home"); 
} 

Может ли кто-нибудь помочь мне с примера? Я ищу в google, но я не мог найти ничего, чтобы помочь мне. Благодаря

+0

вы проверили http://stackoverflow.com/questions/7033428/how-to-make-sure-controller-and-action -exists-before-doing-redirect-asp-net-mvc – noobed

+0

Да, я проверил эту ссылку. Это не то, что мне нужно, потому что метод Redirect() может иметь в качестве параметра ссылку в этой форме («/ Home/Car/1»). Во-первых, я подумал, что могу сделать пинг по этому URL-адресу, но у меня нет хозяина. – CalinCosmin

+0

, если ваша ссылка не заполнена, например, «/ Home/Car/1», вы можете смело добавить свой адрес URL-адреса вашего приложения – noobed

ответ

2

Попробуйте

public ActionResult RedirectUser() 
{ 
    var url = "/Cars/Model/1"; //this is the url 

    var controller = RouteData.Values["controller"].ToString(); 
var action = RouteData.Values["action"].ToString(); 

    if(controller=="car"&& action=="Model") 
    { 
     return this.Redirect(url); 
    } 
    else 
    { 
     return this.RedirectToAction("Index", "Home"); 
    } 

    return this.RedirectToAction("Index", "Home"); 
} 
+0

RouteData.Values ​​["controller"]. ToString() возвращает текущий контроллер и тот же для действия. Мне не нужно проверять, содержит ли мой url текущий контроллер, потому что я могу перенаправить пользователя в другое место (в другом контроллере). Предположим, что я нахожусь в контроллере учетной записи в результате действия входа в систему, то, что вы написали, есть возврат «учетная запись» и «вход в систему». – CalinCosmin

+0

Хотите, чтобы вы проверили перед переадресацией? –

+0

есть. Я хочу проверить, прежде чем перенаправить страницу – CalinCosmin

0

Предполагая URL, что вы пытаетесь перенаправлять под контролем вашего MVC приложения, вы можете использовать URL-адрес помощник Url.Action, чтобы гарантировать, что он является действительным.

Url.Action("Model","Cars", new {id=1}); 
//should yield "Cars/Model/1 if your routing is configured to have id to be optional as below: 
routes.MapRoute(
       name: "Default", 
       url: "{controller}/{action}/{id}", 
       defaults: new { controller = "Cars", action = "Model", id = UrlParameter.Optional } 
      ); 

Предупреждение: Ваш образец кода может не отражать ваш код prod, но url не должен быть жестко закодирован так, как у вас есть. Это взорвется, когда «Автомобили» не находятся в корне приложения в вашей среде развертывания.

0

Вы можете использовать HttpClient отправить запрос GET, как так:

using (var client = new HttpClient()) 
{ 
    HttpResponseMessage response = await client.GetAsync("Cars/Model/1"); 
    if (response.IsSuccessStatusCode) 
    { 
     // redirect here 
    } 
}