asp.net-mvc - 如何接受电子邮件地址作为路由值?

标签 asp.net-mvc asp.net-mvc-2 routes

我怎样才能拥有这条简单的路线:

http://domain.com/Calendar/Unsubscribe/my@email.com

我的路线如下所示:

routes.MapRoute(
    "Unsubscribe", 
    "Calendar/Unsubscribe/{subscriber}", 
    new { 
       controller = "Calendar", 
       action = "Unsubscribe", 
       subscriber = "" }
);

我的行动是:

public ActionResult Unsubscribe(string subscriber)
{
    ...
}

没有任何参数,如 http://domain.com/Calendar/Unsubscribe/ 工作正常,但很快我添加了电子邮件,我得到一个 404 页面: (

我有什么诀窍吗?

谢谢

最佳答案

尝试在 URL http://domain.com/Calendar/Unsubscribe/my@email.com/ 中添加 斜杠无需更改路由规则。

如果您仍想避免添加 尾部斜杠,并且您有 URL 重写可用,您可以在 web.config 中添加重写规则

<system.webServer>
  <rewrite>
    <rules>
      <rule name="Fix Unsubscribe emails route" stopProcessing="true">
        <match url="^(Calendar/Unsubscribe/.*@.*)$" />
        <action type="Rewrite" url="{R:1}/" />
      </rule>
    </rules>
  </rewrite>
</system.webServer>

为了便于阅读,您还可以编写一个比我提供的更好的正则表达式。

您也可以尝试重新排序您的路由参数,例如/Calendar/my@email.com/Unsubscribe,以便电子邮件不是最后一个参数。

关于asp.net-mvc - 如何接受电子邮件地址作为路由值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4307358/

相关文章:

ruby - rspec 索引示例有效但不显示示例

asp.net - Visual Web Developer 中缺少 System.Web.Routing

ruby-on-rails - :path参数在命名空间中的浅路由不起作用

c# - 如何使用 ASP.NET Identity 2.0 允许用户模拟另一个用户?

asp.net-mvc - 将下拉列表的选定值从 View 传递到 mvc3 中的 Controller ?

javascript - 如何最好地在 ASP.NET MVC 中将网格导出为 PDF

c# - 在 ASP.NET MVC 2 中使用 SelectList 挣扎

.net - 我可以使用 string.format() 或 c# 中的任何其他函数来旋转字符串吗?

asp.net-mvc - 在 MVC.NET 的 AuthorizeServices 中,我在哪里设置角色?

c# - 如何在 ASP.NET 中获取和过滤 AD 名字和姓氏