【问题标题】:How to pass email as a parameter at the end of URL in ASP.NET MVC web API?如何在 ASP.NET MVC Web API 的 URL 末尾将电子邮件作为参数传递?
【发布时间】:2012-10-11 13:37:19
【问题描述】:

如何在 ASP.NET MVC Web API 的 URL 末尾将电子邮件作为参数传递?

如下:

test.com/api/sales/getcustomerorders/test@test.com

我想将电子邮件地址作为参数传递给 getcustomerorders 操作。

我们可以使用查询字符串传递。但我想像上面一样格式化网址。

谢谢。

【问题讨论】:

  • 您必须对 URL 中的 @ 符号进行编码,因为它是保留字符。应该看起来像这样:test.com/api/sales/getcustomerorders/test%40test.com
  • 我在这里尝试了相同的网址(使用@)并且它有效.. 出了什么问题?
  • 问题出在 DOT。

标签: asp.net-mvc asp.net-web-api


【解决方案1】:

在 WebApiConfig 中将路由设为“/{email}/”。结尾的“/”会阻止你得到 No HTTP resource was found that match the request URI ...

【讨论】:

  • 简单易行的解决方案。无需更改配置或其他任何东西。感谢发帖。
  • 这对我有用。你能解释一下为什么会这样吗?我不明白。
  • 它起作用的原因是它需要该字段 {email} 并且它将匹配它与它期望的电子邮件字符串匹配,它匹配后面的任何内容,包括 a@b.com 并将其填充到电子邮件变量。喜欢这个答案,顺便说一句,我花了几个小时试图用谷歌搜索特殊字符以避免和其他所有内容(一直工作到我在 URL 中添加了一个“@”,然后它重定向到登录——这很奇怪。谢谢!
【解决方案2】:

这里的问题是您的网址中有句点。

为了让它工作,改变你的网络配置,添加以下两个配置:

<configuration>
  <system.web>
    <httpRuntime relaxedUrlToFileSystemMapping="true" />
  </system.web>
  <system.webServer>
    <modules runAllManagedModulesForAllRequests="true"/>
  </system.webServer>
</configuration>

Haacked 有一篇关于 relexUrlToFileSystemMapping 的博客http://haacked.com/archive/2010/04/29/allowing-reserved-filenames-in-URLs.aspx

我在 IIS express 8 中有一个关于它的错误,需要 runAllManagedModulesForAllRequests: https://aspnetwebstack.codeplex.com/workitem/226

【讨论】:

  • 它可以工作,但如果你引用this link 它会减慢你的应用程序,因为你会为所有请求加载所有模块..
  • 只需要 runAllManagedModulesForAllRequests 来允许电子邮件地址,因为 URL 中使用了句点
【解决方案3】:

Scott Hanselman 在this blog post 中对此进行了介绍。作为替代方案,您可以将电子邮件作为查询字符串参数传递,而不是作为路径的一部分,因为某些字符是不允许的。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-05-04
    • 2012-05-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-24
    • 2013-04-13
    相关资源
    最近更新 更多