- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
注意:不是 RedirectToAction()
导致了问题,而是在 web.config
原始问题:使用 RedirectToAction()
时出现奇怪的行为,我无法在本地重现(调试)。在某些时候,我的路由值从 äa
更改为 äa
,但仅限于服务器 (Azure)。我添加了日志记录以查明确切位置并在此处结束:
RedirectToAction("square", new { id = criteria.Trim().ToLower() });
在本地这正确地重定向到 /find/square/äa
,但在服务器上它最终在 /find/square/äa
。我记录了每一步,当我的字符串传递给 RedirectToAction
时,它仍然完好无损(即使在 Trim()
和 ToLower()
之后),但是损坏了重定向后。我使用的是默认路由
routes.MapRoute("Default", "{controller}/{action}/{id}", new { controller = "Home", action = "Index", id = UrlParameter.Optional }
带有 Controller find
、操作 square
和 id äa
(在本例中)
这让我感到非常惊讶,因为 .NET 在涉及变音符号和 UTF-8 时通常非常谨慎和稳健。我在这里特别迷路,因为我无法在本地重现该问题。我假设这是一个服务器设置,但 Azure 在这一点上非常稀疏。以前有没有人经历过类似的行为?
最佳答案
这是我的代码的一部分,我没有发布,重写规则。我只是在仔细查看 Fiddler 中的重定向后才发现。事实上,我在我故意触发的重定向之后发现了一个额外的重定向,它是由我的重写规则之一引起的:
<rule name="Lowercase Path" stopProcessing="true" >
<match url="[A-Z]" ignoreCase="false" />
<conditions>
<add input="{REQUEST_METHOD}" matchType="Pattern" pattern="POST" ignoreCase="true" negate="true" />
<add input="{URL}" pattern="^.*\.(axd|css|js|jpg|jpeg|png|gif|txt|xml|svg|pdf)$" negate="true" ignoreCase="true" />
</conditions>
<action type="Redirect" url="{tolower:{URL}}" redirectType="Permanent" />
</rule>
其实就是下面一行:
<action type="Redirect" url="{tolower:{URL}}" redirectType="Permanent" />
一旦我禁用此规则,一切都会正常。我的其他不使用 {ToLower:}
的规则没有产生任何问题。我不确定,为什么这不会破坏本地的东西。在做我的研究时,我发现了一篇文章,描述了微软如何修补一个损坏的重写模块,该模块导致类似的元音变音问题。这是推测,但也许我的 Azure 实例上的重写版本未打补丁 - 或者它完全不同。
不幸的是,除了将重写规则与 {tolower:{URL}}
一起使用外,几乎没有其他选择,所以我不得不做一个相当丑陋的解决方法,并在 Global.asax 中检查我的 URL .cs
像这样:
protected void Application_BeginRequest(object sender, EventArgs e)
{
var pathAndQuery = System.Web.HttpUtility.UrlDecode(Request.Url.PathAndQuery);
if (pathAndQuery == null || Regex.IsMatch(pathAndQuery, @"^.*\.(axd|css|js|jpg|jpeg|png|gif|txt|xml|svg|pdf)$"))
{
return;
}
if (Regex.IsMatch(pathAndQuery, ".*[A-Z].*"))
{
Response.Redirect(pathAndQuery.ToLower(), false);
Response.StatusCode = 301;
}
}
我对这种方法并不完全满意;它感觉很臭,但在我找到更好的解决方案之前,这已经足够了。
关于c# - RedirectToAction() 打破元音变音,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34053931/
这是一些 html
任何人都知道如何制作一个方法(我会把它放在一个扩展类中),它只使用表达式(没有魔术字符串)来做与 mvc 的 RedirectToAction 相同的事情。 所以不要写这样的东西: Redirect
我将通过一个简单的示例展示我正在尝试做什么。 我有路线 routes.MapRoute("", "Message", new { con
我有以下代码: Controller : public ActionResult Step1() { return View(); } [AcceptVerbs(HttpVerbs.P
RedirectToAction 不显示 View 。 // Go populate and display PDF using XML file DoPDF(stXML); } Up
我有 2 个 MVC 项目。其中之一是 API,我想从这个 API 将数据传递到同一解决方案中的另一个项目。怎么可能? 我在 Controller 的头部添加了引用 public class Pros
注意:不是 RedirectToAction() 导致了问题,而是在 web.config 中重写规则 原始问题:使用 RedirectToAction() 时出现奇怪的行为,我无法在本地重现(调试)
为什么这不起作用。当我在我的 Create 方法中重定向时,它一直告诉我编辑需要一个 EditStudyModel。重定向应该执行 get,对吗? public ViewResult Crea
我最近更新了我们工作中的 MVC 2 项目以使用区域,但是我在使用 RedirectToAction 方法时遇到了一点问题。 在我们的区域之外,我们仍然有一些 Controller 等。这些 Cont
有什么区别: public ActionResult logOff() { FormsAuth.SignOut(); return RedirectToAction("index",
我的 MVC 代码哪里做错了?索引 View 包括一个提交给自身的表单,我想要的是 Controller 处理提交的表单然后返回到 View 。 实际发生的是表单被正确处理,但返回的 View 就像什
我有一个从 anchor 调用的操作,Site/Controller/Action/ID,其中 ID 是一个 int。 稍后我需要从 Controller 重定向到同一个 Action。 有没有聪明的
我是asp.net MVC的初学者 我有一个像这样的人类 public partial class Person { public int Id { get; set; } publi
我有一个场景,我在 View 页面上并调用 Controller A 中的操作方法,该方法通过 RedirectToAction 返回调用 Controller B 中的另一个操作,并且此操作返回我已
我正在使用 ASP.NET MVC 3。 我编写了一个辅助类,如下所示: public static string NewsList(this UrlHelper helper) { ret
我已经设置了一些区域,但我不确定如何通过 RedirectToAction 方法重定向到它们。似乎没有我可以提供给它的任何 Area 参数。 谢谢 最佳答案 这也行: return RedirectT
我正在开始使用 ASP.Net core MVC 3.1,并且有一个名为 Foo 的区域: endpoints.MapAreaControllerRoute( name: "Foo",
如果用户登录成功,我会尝试重定向用户,但我页面上的代码似乎阻止重定向工作。如果我删除下面的 jQuery,重定向就会起作用。有人可以告诉我如果我做错了什么吗?谢谢 我有以下操作: [AcceptVer
所以我目前正在开发一个网页,其中有一个包含一些表格数据的表格,表格数据的每一行都有一个按钮,负责启动一个进程,当我单击其中一个按钮时,它会触发一个ajax调用。一旦ajax调用完成,它就会更新网页上的
当调用 Html.DisplayNameFor 时,我们只提供一个 lambda 表达式来呈现,例如,通过 item => Model.Name 呈现学生姓名。由于编译时检查,这种方法非常好。 如何使
我是一名优秀的程序员,十分优秀!