return new RedirectResult() 与 return Redirect()

2024-01-30

以下两个控制器 ActionResult 返回语句有什么区别:

return new RedirectResult("http://www.google.com", false);

and

return Redirect("http://www.google.com");

直接从source http://aspnetwebstack.codeplex.com/SourceControl/BrowseLatest

// Copyright (c) Microsoft Open Technologies, Inc. All rights reserved. See License.txt in the project root for license information.

using System.Diagnostics.CodeAnalysis;
using System.Web.Mvc.Properties;

namespace System.Web.Mvc
{
    // represents a result that performs a redirection given some URI
    public class RedirectResult : ActionResult
    {
        [SuppressMessage("Microsoft.Design", "CA1054:UriParametersShouldNotBeStrings", MessageId = "0#", Justification = "Response.Redirect() takes its URI as a string parameter.")]
        public RedirectResult(string url)
            : this(url, permanent: false)
        {
        }

        [SuppressMessage("Microsoft.Design", "CA1054:UriParametersShouldNotBeStrings", MessageId = "0#", Justification = "Response.Redirect() takes its URI as a string parameter.")]
        public RedirectResult(string url, bool permanent)
        {
            if (String.IsNullOrEmpty(url))
            {
                throw new ArgumentException(MvcResources.Common_NullOrEmpty, "url");
            }

            Permanent = permanent;
            Url = url;
        }

        public bool Permanent { get; private set; }

        [SuppressMessage("Microsoft.Design", "CA1056:UriPropertiesShouldNotBeStrings", Justification = "Response.Redirect() takes its URI as a string parameter.")]
        public string Url { get; private set; }

        public override void ExecuteResult(ControllerContext context)
        {
            if (context == null)
            {
                throw new ArgumentNullException("context");
            }
            if (context.IsChildAction)
            {
                throw new InvalidOperationException(MvcResources.RedirectAction_CannotRedirectInChildAction);
            }

            string destinationUrl = UrlHelper.GenerateContentUrl(Url, context.HttpContext);
            context.Controller.TempData.Keep();

            if (Permanent)
            {
                context.HttpContext.Response.RedirectPermanent(destinationUrl, endResponse: false);
            }
            else
            {
                context.HttpContext.Response.Redirect(destinationUrl, endResponse: false);
            }
        }
    }
}

第二个参数决定是否响应是 302(临时)或 301 永久重定向 http://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html。默认情况下,该值为false.

第二种方法已开启Controller这只是一种方便的方法。这种方法已经存在于 MVC 的多个版本中(至少可以追溯到 2 个版本),但是 IIRC,将永久部分添加到RedirectResult我认为已经出现在 MVC 4 中(我不记得在 MVC 3 中看到过它)。

// Copyright (c) Microsoft Open Technologies, Inc. All rights reserved. See License.txt in the project root for license information.

using System.Diagnostics.CodeAnalysis;
using System.Globalization;
using System.IO;
using System.Security.Principal;
using System.Text;
using System.Web.Mvc.Async;
using System.Web.Mvc.Properties;
using System.Web.Profile;
using System.Web.Routing;
namespace System.Web.Mvc
{
    [SuppressMessage("Microsoft.Maintainability", "CA1506:AvoidExcessiveClassCoupling", Justification = "Class complexity dictated by public surface area")]
    public abstract class Controller : ControllerBase, IActionFilter, IAuthorizationFilter, IDisposable, IExceptionFilter, IResultFilter, IAsyncController, IAsyncManagerContainer
    {
      // omitted for brevity

      [SuppressMessage("Microsoft.Design", "CA1054:UriParametersShouldNotBeStrings", MessageId = "0#", Justification = "Response.Redirect() takes its URI as a string parameter.")]
      protected internal virtual RedirectResult Redirect(string url)
      {
          if (String.IsNullOrEmpty(url))
          {
              throw new ArgumentException(MvcResources.Common_NullOrEmpty, "url");
          }

          return new RedirectResult(url);
      }
    }
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

return new RedirectResult() 与 return Redirect() 的相关文章

  • MVC WebGrid 设置渲染的ID

    使用 MVC 3 中的 WebGrid 如何在呈现时指定控件的名称 即呈现时表的 id var someGrid new WebGrid source Model Users defaultSort Name rowsPerPage 50
  • 检查域名是否可供购买 - C# [关闭]

    Closed 此问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 有什么方法可以检查某个域名是否可以购买 是否有任何图书馆可以做到这一点 THanks 您可以看一下 ht
  • 将动态控件插入控件集合的中间

    这是我的第一篇文章 我非常绝望 所以我超越了我的标准谷歌搜索 我相信这是一个高级或专家级 NET 问题 问题是我已经构建了一个 NET Web 应用程序 它需要能够将用户控件动态插入到列表中间 我对动态控件非常满意 只要它们只需要添加到列表
  • 在 JavaScript(而非 JQuery)中自动设置电话号码格式

    我发现以下代码用于在 JavaScript 中格式化电话号码这篇文章来自堆栈溢出 https stackoverflow com questions 45471788 formatting the phone number for mult
  • 检查输出是否重定向

    我有一个用 C 编写的控制台应用程序 它处理一些数据然后打印结果 在结果可用之前 会有一个小动画 和不断更新的进度百分比 xx 显然 如果用户重定向我的应用程序的输出 这将被打印到输出重定向到的文本文件中 如果可能的话我想避免这种情况 那么
  • Html.BeginForm() 扩展类型

    有谁知道创建自定义 HtmlHelperextension 方法的语法 其行为类似于 p Loads of html stuff here p 我正在思考一些类似的事情 有任何想法吗 Cheers ETF 传真 您需要创建一个实现的类IDi
  • 什么是 IIS 应用程序池?

    应用程序池到底是什么 它的目的是什么 应用程序池允许您将应用程序彼此隔离 即使它们运行在同一台服务器上 这样 如果一个应用程序出现错误 就不会影响其他应用程序 此外 应用程序池允许您分隔需要不同安全级别的不同应用程序 这是一个很好的资源 I
  • FluentValidation:验证类型名称必须是唯一的

    我的代码中指定了以下规则 RuleFor x gt x Auction Round1Ring1Start GreaterThan DateTime Now RuleFor x gt x Auction Round1Ring1End Grea
  • 如何在 ASP.NET 中动态添加文本框?

    我对我的 asp net 页面有以下要求 用户可以通过单击 添加新类别 超链接在页面 A 上动态添加文本框 他点击页面 A 上的提交按钮并被重定向到页面 B 当他单击此页面中的页面 A 链接时 他添加的文本框应该保留 有人可以帮我解决这个问
  • 即使在不活动状态下,Hangfire 也会继续运行 SQL 查询

    我正在开发一个 ASP net MVC 5 网站 并使用 Hangfire 来安排一些任务 在本例中每 3 分钟一次 我知道一个事实是 运行这样的任务 以及与之相关的数据库查询 只需要几秒钟 我面临的问题是 Hangfire 似乎让我的 S
  • 在实体框架中不使用 Dispose 或 using()

    我一路上正在编写一个网络应用程序并学习实体框架 如果我做错了什么 我很好奇 我在查询时没有使用过 dispose 或 using 语句 我的存储库示例 public User GetUserById int sessionId var us
  • 找出用户属于哪些组

    我有一个刚刚创建的 Windows 用户帐户 以 XYZ 为例 此 XYZ 属于我在计算机管理 gt 本地用户和组中创建的用户组和自定义组 因此 在属性中我看到该用户属于 2 个组 现在我想获取这些组并显示它们 有什么建议么 我已经这样做了
  • VS2010和ASP.NET单元测试问题/WebHostAdapter异常

    我花了半天的时间试图让 ASP NET 单元测试正常工作 如艾伦的开发博客 http www gangleri net 2007 12 29 UnitTestingASPNetApplicationsWithVisualStudio2008
  • .NET Core 应用程序在 Web 服务器上本地运行,但无法通过远程浏览器访问

    我有一个 ASP NET Core 1 1 Web 应用程序 已将其发布到远程服务器 我已经在 IIS 中设置了网站 如下所示这些说明 https learn microsoft com en us aspnet core publishi
  • 尝试获取类型 LogWriter、键“”的实例时发生激活错误?

    我有 ASP NET 网站 我添加了参考Microsoft Practices EnterpriseLibrary Logging dll到该网站 在 web config 文件中 定义如下
  • 使用 RsaProtectedConfigurationProvider 进行 Web.Config 加密 - “错误数据”错误

    我正在尝试加密 ASP NET 2 0 Web 应用程序的 Web Config 文件中的连接字符串值 如下所示MSDN 上描述的过程 http msdn microsoft com en us library yxw286t2 VS 80
  • 如何在 ASP.Net MVC 或等效控件中构建复合控件或模板控件?

    在我们当前的 ASP Net Webforms 应用程序中 我们有几个复合 模板服务器控件 它们的存在只是为了具有共同的外观和感觉 例如 我们有一个面板控件 它有一个标题 一个与面板内容相关的按钮位置 当然还有内容 在 MVC 中如何最好地
  • 为什么我的 ASP.NET MVC 应用程序在单个会话中多次触发 Session_Start?

    我们有一个 MVC NET 应用程序在重新启动时遇到致命错误 在 Session Start 事件处理程序中 我们将会话 id 添加到字典中 在 Session End 处理程序中 我们将其删除 考虑以下请求序列 获取主页 mvc 获取ma
  • 如何从代码隐藏文件中的asp.net用户控件注册(调用)jQuery函数?

    如何从代码隐藏文件中的asp net用户控件注册 调用 jQuery函数 您可以使用ClientScriptManager RegisterStartupScript http msdn microsoft com en us librar
  • 如果方法参数是 string 或 int,ASP.NET WebAPI 会抛出 404

    我对 ASP NET MVC4 WebAPI 做了一个非常简单的测试 发现了一些有趣的问题 当一个方法采用复杂类型时 它会起作用 但是当它采用 string 或 int 时 它将抛出 404 如给出的屏幕截图所示 AddProduct 可以

随机推荐

  • XML 解析错误:找不到元素位置:http://localhost:8000/web.config 第 1 行,第 1 列

    我是 WCF 和 IIS 的新手 当我尝试在 IIS 中托管 Web 服务并在浏览器中打开它时 它向我显示上述 XML 解析错误 我已经尝试了相关帖子中提到的所有要点 但似乎不起作用 有没有我可能错过的解决方案 编辑 我完全按照此处提到的所
  • 尝试转换列数据时值太长失败

    Scenario 我有一个源文件 其中每个新行都包含 JSON 块 然后 我有一个简单的 U SQL 摘录 如下所示 其中 RawString 表示文件中的每个新行 FileName 定义为 SourceFile 路径中的变量 BaseEx
  • 使用 C 预处理器迭代结构体字段

    我有几个不同的 C 结构和类 它们具有相同名称的字段 我必须经常在它们之间进行复制 我想做类似的事情 用bashy伪代码 struct S double a double b double c class C public void set
  • 如何在 OS X 上不使用特殊字符来代替 VIM 的元组合键

    On OS X at any program when I type option p I get option P I get and there s a bunch of alt option bindings that just re
  • 使用 document.getElementsByTagName 迭代 dom 元素,将元素作为 jquery 对象传递

    我需要的是在某个起始元素处迭代 dom 然后遍历起始元素下面的所有元素 这是我到目前为止所做的事情 function iterDomFromStartElem function startElem callBackFunc if start
  • 是否可以用JavaScript制作实时网络游戏

    是否可以使用JavaScript制作实时网络游戏 我见过 Flash 做到了这一点 但我对制作一款不依赖于任何插件的基于浏览器的多人游戏感兴趣 我读到 不可能保持 Ajax 连接打开以进行流通信 并且每秒建立多个新的 Ajax 连接来保持客
  • 从 DbVisualizer 连接到 H2 服务器

    我的 H2 数据库配置如下 Configuration Profile Profiles DEV public class DevDataSourceConfiguration Bean initMethod start destroyMe
  • 如何使用 Windows 搜索 API 将文件夹添加到 Windows 索引列表中

    在索引选项中 索引这些位置 中有一个位置列表 有没有办法通过 C 将从我的应用程序创建的文件夹添加到列表中 我找到了一个解决方案 任何想要让他们的应用程序文件夹支持 C 中的 windows 搜索的人都可以这样做 下载 Windows 搜索
  • XAML 和 Windows Mobile(.Net Compact Framework)

    Windows Mobile 上是否支持 XAML 不是来自微软 不是 Windows CE R3添加了Silverlight http www microsoft com windowsembedded en us products wi
  • 如何从“groupby”对象的“单元格”中获取值?

    假设我有以下数据框 A B C D 0 foo one 1 10 1 bar one 2 20 2 foo two 3 30 3 bar one 4 40 4 foo two 5 50 5 bar two 6 60 6 foo one 7
  • 如何更改文本字段的文本大小和字段大小?

    我正在尝试创建一个类似这样的输入 SwiftUI 我已经取得了进展 但我不知道如何更改文本字段的高度并使输入文本大小更大 您可以通过更改占位符文本的字体大小来更改文本大小 这会自动调整占位符文本的字体大小 TextField的身高 就您而言
  • 无法安装 Android SDK 17 [重复]

    这个问题在这里已经有答案了 可能的重复 Android 更新到 Android SDK 工具修订版 7 时遇到问题 https stackoverflow com questions 4360894 android trouble upda
  • Docker 命令不再响应

    大多数 docker 命令永远不会结束 我必须用 CTRL C 手动中断它们 即使是简单的命令 例如docker ps or docker info不回应 然而 docker help and docker version还在工作 我认为特
  • 标准输入到 powershell 脚本

    我正在运行一个服务 它可以调用外部进程来修改文本流 然后再将其返回到服务 文本流从服务传递到 stdout 上的外部进程 并从 stdin 上的服务读取修改后的结果 换句话说 外部过程 命令 可以用作文本 过滤器 我想使用 powershe
  • AdapterView 不支持 addView(View)

    我开始进行 Android 开发 并且在标题上遇到了该错误 这是我的 Contacts java package us inevent toot import android os Bundle import android support
  • AWS 无法删除网络接口

    在AWS中 我有网络接口 但我无法删除它们 因为它们应该正在使用中 我尝试过通过强制选项将它们分开 但这不起作用 我如何识别网络接口使用的对象 查找网络接口所连接的资源的最佳方法是检查 ENI 的 描述 字段 根据资源类型 此描述字段可能会
  • 避免空指针

    我正在用 C 11 实现我自己的编程语言 我设计的数据类型之一是Token班级 它旨在存储从源文件读取的标记 以及标记的内容 类型以及遇到的行 令牌可以是单字符符号 长字符串 数字或名称 因此它需要能够存储不同的数据类型 可以是用于符号的字
  • Apache 重写规则类似于 Nginx try_files

    在 Nginx 中 我使用了 try files 它基本上接受对域上文件的任何请求 并将其通过名为 file parse php 的自定义 php 脚本传递 在 Nginx 中 它看起来像这样 try files url file pars
  • 对于具有 Float 原始值的 Swift 枚举,“枚举案例的原始值不是唯一的”

    根据Swift 编程语言 https developer apple com library mac documentation Swift Conceptual Swift Programming Language Enumeration
  • return new RedirectResult() 与 return Redirect()

    以下两个控制器 ActionResult 返回语句有什么区别 return new RedirectResult http www google com false and return Redirect http www google c