.NET MVC路由瓦特/ url编码问题 [英] .NET MVC Routing w/ Url Encoding Problems
问题描述
我有以下路由code:
routes.MapRoute(
电子邮件验证/ {}的sessionId
电子邮件验证/ {}的sessionId
新{控制器=用户,行动=EmailValidated的sessionId = UrlParameter.Optional}
);
当我打的路线瓦特/的东西是URL连接$ C $光盘,它不适合%2F,%2B和其他一些转义字符的路径相匹配。它也不会匹配非URL连接codeD(事W / +等),例如
本作品:
email-validated/XQiKC6KMM%2cmko4nOvzGRwPu9oaZFoCtXsFFJg3ZTf9S5rsBbLGjnz3FN3SJ0apEZcqK1PIcCY28mRMykB39XnFLKaL7390CDfLZiV77cso
块引用>这不工作(containts%2F等):
<$p$p><$c$c>email-validated/XQiKC6KMM%2fmko4nOvzGRwPu9oaZFoCtXsFFJg3ZTf9S5rsBbLGjnz3FN3SJ0apEZcqK1PIcCY28mRMykB39XnFLKaL7390CDfLZiV77cso
这不工作(包含+等)
<$p$p><$c$c>email-validated/XQiKC6KMM+mko4nOvzGRwPu9oaZFoCtXsFFJg3ZTf9S5rsBbLGjnz3FN3SJ0apEZcqK1PIcCY28mRMykB39XnFLKaL7390CDfLZiV77cso
解决方案它看起来像路由路径手柄逃过/'s和+的古怪。尝试将它作为查询字符串参数来代替。
请您的端点:
routes.MapRoute(
电子邮件验证
电子邮件验证
新{控制器=用户,行动=EmailValidated}
);与请求调用它:
<$p$p><$c$c>email-validated/?sessionId=XQiKC6KMM%2fmko4nOvzGRwPu9oaZFoCtXsFFJg3ZTf9S5rsBbLGjnz3FN3SJ0apEZcqK1PIcCY28mRMykB39XnFLKaL7390CDfLZiV77cso
再从
更改功能EmailValidatedFunction(字符串的sessionId)
{
//...do东西用的sessionId这里
}到
EmailValidatedFunction()
{
字符串的sessionId =请求[的sessionId];
//...do东西用的sessionId这里
}I have the following routing code:
routes.MapRoute( "email-validated/{sessionId}", "email-validated/{sessionId}", new { controller = "User", action = "EmailValidated", sessionId = UrlParameter.Optional } );
When I hit the route w/ something that is url encoded it won't match the route for %2f, %2b and some other escaped characters. It also won't match for non url encoded (things w/ + etc) For instance
This works:
email-validated/XQiKC6KMM%2cmko4nOvzGRwPu9oaZFoCtXsFFJg3ZTf9S5rsBbLGjnz3FN3SJ0apEZcqK1PIcCY28mRMykB39XnFLKaL7390CDfLZiV77cso
This doesn't work ( containts %2f etc):
email-validated/XQiKC6KMM%2fmko4nOvzGRwPu9oaZFoCtXsFFJg3ZTf9S5rsBbLGjnz3FN3SJ0apEZcqK1PIcCY28mRMykB39XnFLKaL7390CDfLZiV77cso
This doesn't work (contains + etc)
email-validated/XQiKC6KMM+mko4nOvzGRwPu9oaZFoCtXsFFJg3ZTf9S5rsBbLGjnz3FN3SJ0apEZcqK1PIcCY28mRMykB39XnFLKaL7390CDfLZiV77cso
解决方案It looks like the routing path handles escaped /'s and +'s weirdly. Try passing it in as a query string argument instead.
Make your endpoint:
routes.MapRoute( "email-validated", "email-validated", new { controller = "User", action = "EmailValidated" } );
Call it with a request like:
email-validated/?sessionId=XQiKC6KMM%2fmko4nOvzGRwPu9oaZFoCtXsFFJg3ZTf9S5rsBbLGjnz3FN3SJ0apEZcqK1PIcCY28mRMykB39XnFLKaL7390CDfLZiV77cso
And then change your function from
EmailValidatedFunction(string sessionId) { //...do stuff with sessionId here }
to:
EmailValidatedFunction() { string sessionId = Request["sessionId"]; //...do stuff with sessionId here }
这篇关于.NET MVC路由瓦特/ url编码问题的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!