.NET MVC路由瓦特/ url编码问题 [英] .NET MVC Routing w/ Url Encoding Problems

查看:154
本文介绍了.NET MVC路由瓦特/ url编码问题的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有以下路由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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆