2014-10-16 2 views
0

У меня есть маршрутизация согласно нижеBad Request - Недопустимый URL HTTP Error 400. Запрос URL недействителен

routes.MapRoute(
      name: "Default", 
      url: "{controller}/{action}/{id}", 
      defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional } 
     ); 

Теперь для части ид, я комбинируя множество наборов данных, разделённых «-» символа и шифровать его с помощью AES (RijndaelManaged) шифрования. И я UrlEncode его и отправить кому-то адрес электронной почты в соответствии с ниже ...

http://localhost:7777/Product/Invite/%e3%b7%92%e4%97%ad%eb%b6%b3%e3%b7%90%eb%b2%8c%e2%aa%ad%e7%86%87%e9%b6%9e%ec%ae%aa%ec%a7%a2%ec%9a%a0%ec%ba%be%e2%89%bc%e5%ba%aa%ee%be%a8%ee%9f%a8%ea%aa%b6%e3%87%83%e3%8c%b4%eb%99%89%e8%8f%bb%e4%b0%ab%ef%bf%bd%e7%a0%99 

, но при нажатии его я получаю сообщение об ошибке.

Bad Request - Invalid URL 

HTTP Error 400. The request URL is invalid. 

Ниже процесс шифрования и кодирования

string data1 = email.EmailID + " - /" + events.EventID + "-" + DateTime.Now.ToString("yyyyMMddhhmm") + "-" + events.MemberID; 

var encoding = new UTF8Encoding(false, true); 
byte[] cypherBytes = advEncryProvider.Encrypt(encoding.GetBytes(data1)); 
string dataEncodedString = HttpUtility.UrlEncode(GetString(cypherBytes)); 

Пробовал редактировать web.config, как How do I enable special characters in MVC routing?

, но до сих пор не повезло

<system.web> 
<httpRuntime targetFramework="4.5" requestPathInvalidCharacters="" requestValidationMode="2.0"/> 
<compilation targetFramework="4.5" debug="true"/> 
<pages validateRequest="false"> 
    <namespaces> 
    <add namespace="System.Web.Helpers"/> 
    <add namespace="System.Web.Mvc"/> 
    <add namespace="System.Web.Mvc.Ajax"/> 
    <add namespace="System.Web.Mvc.Html"/> 
    <add namespace="System.Web.Optimization"/> 
    <add namespace="System.Web.Routing"/> 
    <add namespace="System.Web.WebPages"/> 
    </namespaces> 
</pages> 

** Обновление **

мне удалось решить эту проблему, делая кодирование base64 как предложено Callem Питтард ... :)

An efficient way to Base64 encode a byte array?

+0

Почему бы вам не использовать тело вместо URL для передачи данных? – NMK

+0

Вы можете base64encode/декодировать его, чтобы дать вам безопасные символы в URL-адресе ... –

+0

Callem Pittard, я попробовал ваше предложение, и это сработало! Благодаря! – user3663854

ответ

0

URL, длина символа макс по умолчанию составляет 260, как это определено в реестре HTTP.SYS. Я думаю, что base64, кодирующий ваш URL, просто сократил его ниже этого предела. Вы можете переопределить этот предел, если вам нужно, добавив новое значение в реестр.

Смотрите эту статью для получения дополнительной информации: https://support.microsoft.com/en-us/kb/820129

Смежные вопросы