【问题标题】:Redirect to url in ASP MVC重定向到 ASP MVC 中的 url
【发布时间】:2015-06-26 15:09:21
【问题描述】:

我有一个内部正在执行重定向(url)的操作结果方法。我的问题是如何在重定向之前检查 url 是否有效?

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");
}

谁能帮我举个例子?我在谷歌上搜索,但找不到任何可以帮助我的东西。谢谢

【问题讨论】:

  • 是的,我检查了那个链接。这不是我需要的,因为 Redirect() 方法可以将这种形式的链接作为参数(“/Home/Car/1”)。首先,我认为我可以对那个 url 执行 ping 操作,但我没有主机。
  • 如果您的链接不完整,例如“/Home/Car/1”,那么您可以安全地附加您的应用程序 url 基地址
  • 为什么需要检查 URL 是否有效?它总是会是一个内部(相对)URL 还是可能是外部的?一种简单的方法是使用 HttpClient 发送获取请求并检查响应状态。

标签: .net asp.net-mvc asp.net-mvc-4 url-redirection


【解决方案1】:

试试这个

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");
}

【讨论】:

  • RouteData.Values["controller"].ToString() 正在返回当前控制器和相同的操作。我不需要检查我的 url 是否包含当前控制器,因为我可以将用户重定向到另一个位置(在另一个控制器中)。假设我在登录操作结果中的帐户控制器中,您在那里写的是返回“帐户”和“登录”。
  • 要在重定向页面之前检查吗?
【解决方案2】:

假设您尝试重定向到的 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 }
            );

警告:您的示例代码可能无法反映您的产品代码,但不应以您的方式对 url 进行硬编码。当“Cars”不在您的部署环境中应用程序的根目录时,这将爆炸。

【讨论】:

    【解决方案3】:

    您可以像这样使用 HttpClient 发送 get 请求:

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

    【讨论】:

      猜你喜欢
      • 2017-02-02
      • 1970-01-01
      • 1970-01-01
      • 2021-07-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多