У меня есть маршрут, который выглядит так:
http://localhost:1936/user/someOne/##feed%233dbfc1b3-44b4-42b4-9305-4822ac151527
Мои маршруты настроены следующим образом:
routes.MapRoute("Profile", "user/{userName}/{treningId}",
new { controller = "Profile", action = "Index", userName = UrlParameter.Optional, treningId = UrlParameter.Optional }
);
И действие в моем контроллере:
public ActionResult Index(string username, string treningId)
{
//more code here
}
Но я не могу получить эту часть: ##feed%233dbfc1b3-44b4-42b4-9305-4822ac151527
, когда я отлаживал код, я видел, что treningId было null.
Мой вопрос: как я могу получить часть URL после ##?
Вы не можете.
Браузер не отправляет материал после первого # на сервер (вы можете проверить это, используя отладчик в своем браузере, чтобы проверить трафик между вашим браузером и сервером). Это потому, что символ # (hash) имеет особое значение в HTTP.
Почему бы вам не просто
http://localhost:1936/user/someOne?myparameter=feed%233dbfc1b3-44b4-42b4-9305-4822ac151527
) или, альтернативно,Это невозможно, так как хеши не включены в запрос; они зарезервированы для использования на стороне клиента в URL-адресах (как правило, для указания определенного местоположения в/части документа).
У вас есть два варианта. Либо кодируйте хэш-символ как %23
:
%23%23feed%233dbfc1b3-44b4-42b4-9305-4822ac151527
Или используйте другой символ/маршрут.
Как вы указали свой URL-адрес, браузер не будет передавать какую-либо часть идентификатора фрагмента - хэш-часть URL-адреса. Таким образом, ваше приложение MVC никогда не получит значение и, следовательно, всегда будет иметь значение null
.
Чтобы сделать это значение доступным для MVC, избегайте #
чтобы избежать маркировки начала фрагмента части URL.