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

问题描述:

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

象下面这样:

​​

我想传递的电子邮件地址作为参数传递给getcustomerorders行动。

我们可以通过使用查询字符串。但我想像上面那样格式化网址。

谢谢。

+0

您必须在URL中编码@符号,因为它是保留字符。应该看起来像这样:test.com/api/sales/getcustomerorders/test%40test.com –

+0

我在这里尝试了相同的URL(用@),它的工作原理..什么错了? – MuriloKunze

+0

这是问题的DOT。 –

在WebApiConfig中将路由设置为“/ {email} /”。结尾“/”将阻止您获取没有找到与请求URI相匹配的HTTP资源...

+1

简单而简单的解决方案。无需更改配置或其他任何东西。感谢发布。 –

+0

这救了我! –

+1

这对我有用。你能解释一下为什么这是可行的吗?我不明白。 – spoof3r

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

这里的问题是,你有期限的网址。

为了使其工作,改变你的web配置中添加以下两种配置:

<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

博客,我有一个bug它在IIS中表达8并需要runAllManagedModulesForAllRequests: https://aspnetwebstack.codeplex.com/workitem/226

+0

它的作品,但如果你参考[这个链接](http://stackoverflow.com/questions/11048863/modules-runallmanagedmodulesforallrequests-true-意味)它会减慢你的应用程序,因为你加载所有模块的所有请求.. – davidlebr1

+0

只是runAllManagedModulesForAllRequests需要允许一个电子邮件地址,因为在URL中使用了句点 – user2320464