asp net mvc redirect to url
Перенаправления (редирект)
Обычный результат из метода действия не генерирует какой-то вывод непосредственно, а предназначен для перенаправления браузера пользователя на другой URL. В большинстве случаев этим URL является другой метод действия в приложении, который генерирует вывод, отображаемый пользователям.
При выполнении перенаправления браузеру отправляется один из следующих двух кодов HTTP:
Код HTTP 302
Означает временное перенаправление. Это наиболее часто применяемый тип перенаправления.
Код HTTP 301
Означает постоянное перенаправление. Данный код должен применяться с осторожностью, т.к. он указывает получателю больше не запрашивать исходный URL, а использовать новый URL, который передается вместе с кодом перенаправления. В случае сомнений применяйте временное перенаправление, т.е. отправляйте код 302.
Перенаправление на точный URL
Наиболее базовый способ перенаправления браузера заключается в вызове метода Redirect() класса контроллера, который возвращает экземпляр класса RedirectResult, как показано в примере ниже:
URL, на который необходимо выполнить перенаправление, выражается в виде строки и передается в качестве параметра методу Redirect(). Метод Redirect() обеспечивает временное перенаправление. Постоянное перенаправление можно реализовать с помощью метода RedirectPermanent(), как продемонстрировано в примере ниже:
Модульное тестирование: перенаправление на точные URL
Перенаправление на точные URL тестировать очень просто. С помощью свойств Url и Permanent класса RedirectResult можно прочитать URL и вид перенаправления (постоянное или временное). Ниже приведен тестовый метод для перенаправления:
Обратите внимание, что тест обновлен для получения экземпляра класса RedirectResult при вызове метода действия.
Перенаправление на URL системы маршрутизации
Метод RedirectToRoute() выдает временное перенаправление. Для постоянного перенаправления применяйте метод RedirectToRoutePermanent(). Оба метода принимают анонимный тип, свойства которого затем передаются системе маршрутизации для генерирования URL.
Обратите внимание, что метод RedirectToRoute() возвращает объект RedirectRouteResult, поэтому метод действия был изменен для возврата указанного типа.
Модульное тестирование: перенаправления на URL системы маршрутизации
Ниже приведен модульный тест для текущего метода действия RedirectRoute контроллера Example:
Как видите, результат проверяется косвенным образом за счет просмотра информации о маршруте, предоставляемой объектом RedirectToRouteResult, поэтому нет необходимости в разборе URL.
Перенаправление на метод действия
Выполнить перенаправление на метод действия можно более элегантно, воспользовавшись методом RedirectToAction() (для временного перенаправления) или методом RedirectToActionPermanent() (для постоянного перенаправления). Они являются просто оболочками вокруг метода RedirectToRoute() и позволяют указывать значения для метода действия и контроллера без необходимости в создании анонимного типа:
Если указан только метод действия, предполагается, что он относится к текущему контроллеру. Для перенаправления на другой контроллер понадобится передать его имя в виде параметра, например:
Доступны и другие перегруженные версии, которые можно использовать для предоставления дополнительных значений, применяемых при генерации URL. Они выражаются с помощью анонимного типа, который не умаляет предназначение удобного метода, но может сделать код более удобным для чтения.
Значения, предоставляемые для метода действия и контроллера, не проверяются перед их передачей системе маршрутизации. Вы сами отвечаете за то, что указываемые цели в действительности существуют.
Сохранение данных между перенаправлениями
Перенаправление приводит к отправке браузером полностью нового запроса HTTP, а это означает невозможность доступа к деталям исходного запроса. Если необходимо передать данные из одного запроса в другой, можно воспользоваться объектом TempData. Объект TempData похож на данные Session за исключением того, что значения TempData помечаются для удаления, когда они прочитаны, и удаляются после обработки запроса. Это идеальный прием для краткосрочных данных, которые должны быть предохранены между перенаправлениями.
Ниже приведен простой пример метода действия, в котором используется метод RedirectToAction():
Когда этот метод обрабатывает запрос, он устанавливает значения в коллекции TempData, а затем перенаправляет браузер пользователя на метод действия Index() в том же самом контроллере. В целевом методе действия значения TempData могут быть прочитаны и переданы представлению:
Более прямолинейный подход предусматривает чтение этих значений непосредственно в представлении:
Чтение значений в представлении избавляет от необходимости применения объекта ViewBag в методе действия. Тем не менее, результаты TempData потребуется приводить к соответствующим типам.
Чтобы извлечь из TempData значение, не помечая его как подлежащее удалению, следует воспользоваться методом Keep(), например:
С помощью метода Keep() значение можно предохранить от удаления:
Метод Keep() не защищает значение навсегда. Если значение будет прочитано снова, оно будет помечено для удаления еще раз. Для сохранения значений, которые не должны удаляться после обработки запроса, применяйте вместо объекта TempData данные сеанса.
ASP.NET MVC: Redirect from query string params to a canonical url
In my Asp.Net Mvc project I’d like to have a good looking urls, e.g. mysite.com/Page2, and I want to redirect from my old style urls (such as mysite.com?page=2) with 301 state so that there won’t be two urls with identical content. Is there a way to do it?
As far as I know Asp.Net binding framework doesn’t make difference between query string and curly brace params
3 Answers 3
I am not sure, I got your question right. It seems, your current setup relies on those GET parameters (like mysite.com?page=2). If you dont want to change this, you will have to use those parameters further. There would be no problem in doing so, though. Your users do not have to use or see them. In order to publish ‘new style URLs’ only, you may setup a URL redirect in your web server. That would change new style URLs to old style URLs.
The problem is the 301. If the user requests an old style URL, it would be accepted by the webserver as well. Refusing the request with a 301 error seems hard to achieve for me.
Note the new parameter name. In your root page (or master page, if you are using those), you may handle the redirect permanent (301) manually. Therefore, incoming ‘old style requests’ are distinguishable by using old parameter names. This could be used to manually assemble the 301 in the response in ASP code.
Personally, I would sugesst, to give up the 301 idea and just use URL redirection.
How can I redirect to a URL?
How can I redirect the viewer to a URL?
I noticed that someone asked How to redirect to another webpage in JavaScript/jQuery?, but I’m not exactly sure where this should go.
I have tried in the controller with:
window.location.replace(«http://192.168.1.109/MWT/Taglist/ShowMap» + LastId);
and in the view with:
Neither of these work. In both places places window has a red squiggly line underneath it and when I hover over it the message says «The name ‘window’ does not exist in the current context.»
Any help would be greatly appreciated!
5 Answers 5
Your question is tagged MVC 3, so I’ll give you the answer for that in spite of the JavaScript example you listed. In your controller class use this code:
This is occuring on the server, meaning that the client browser recieves a redirect response for which the browser will likely submit an additional request. If you return a page with JavaScript it will have to load a page, run the JavaScript (presuming it is enable on the client’s browser), the load the next page. Among other problems, using JavaScript means that if the user presses the back button they will be repeatedly redirected again back to the page they are currently on.
or, it you use T4MVC (and you should ;-))
Not the answer you’re looking for? Browse other questions tagged asp.net-mvc-3 redirect or ask your own question.
Linked
Related
Hot Network Questions
Subscribe to RSS
To subscribe to this RSS feed, copy and paste this URL into your RSS reader.
site design / logo © 2021 Stack Exchange Inc; user contributions licensed under cc by-sa. rev 2021.9.16.40224
By clicking “Accept all cookies”, you agree Stack Exchange can store cookies on your device and disclose information in accordance with our Cookie Policy.
Asp.net MVC redirect Url to another controller view
I am very new to MVC and trying to migrate asp.net application to MVC. Basically I am trying to reuse the code where ever possible. In one case I was trying to use Redirect(«SomeUrl») and it works pretty well with the view under same controller.
For eg., I added below piece of code in HomeController.cs
Well, could someone suggest me if I can use Redirect(Url) to redirect to a view in another Controller? is there any format for Url something like
(I’ve read in other posts that I can achieve this using RedirectToAction, but I am trying not to change existing code which uses querystring values. )
2 Answers 2
Don’t use Redirect to redirect to Actions in your app. There are several reasons for this. First, it’s just simpler to user RedirectToAction as Alundra’s answer provides. However, simpler is only part of the answer.
There’s a problem with using Redirect. And that has to do with the way Routing works in MVC. In MVC, you can reach the same action via multiple different URL’s. For instance, in a default MVC template, the following are all valid URL’s.
Now, what happens when you use Redirect? If you use the last url, it will work fine. You’ll end up with the following url.
But if you’re at any of the others, you have a problem.
Oops. that won’t work. That will be looking for a controller named HomeMgrController.
You get the same at the root as well.
Using RedirectToAction solves this problem, as it takes your routing into account and will figure out the correct url to redirect you to based on the Controller and Action you specify.
URL Rewriting
Введение в URL Rewriting
Например, определим автоматическое перенаправление с адресов с www на адреса без www:
: глобальные правила, которые задаются на стороне сервера и по отношению ко всему серверу. Они определяются в файле ApplicationHost.config и не могут быть переопределены или отключены на более низком уровне (на уровне отдельных сайтов и веб-приложений). Эти правила срабатывают во время события PreBeginRequest на этапе обработки запроса.
: это те правила, которые задаются на более низких уровнях конфигурационной иерархии, в частности, на уровне приложения в файле web.config и которые были использованы в примере выше. Эти правила срабатывают во время события BeginRequest
Pattern – выражение, которому должна соответствовать строка запроса и которое задается в элементе
Conditions – различные дополнительные условия, которым должен соответствовать URL-адрес. Например, значения HTTP-заголовков, пути к файлам и т.д.
Action – действие, которое должно выполняться, если строка URL соответствует регулярному выражению в Pattern и условиям Conditions
Переопределение URL имеет следующий порядок действий:
Строка запроса сравнивается с выражением в элементе match. Если обнаружится, что запрошенный адрес не соответствует выражению, то модуль URL Rewrite Module прекращает обрабатывать текущее правило и переходит к следующему (если задано несколько правил)
Если строка запроса соответствует выражению в элементе match и также определены дополнительные условия, то URL Rewrite Module проверяет эти условия. И если URL соответствует этим условиям, то выполняется действие action
Pattern
С помощью атрибута url определяется выражение, с которым сравнивается строка запроса.
ECMAScript : стандарт синтаксиса регулярных выражений ECMAScript. Если мы не используем атрибут patternSyntax, то данное значение используется для правила по умолчанию.
Wildcard : для поиска соответствия используются метасимволы
Кроме атрибута url элемент match имеет еще ряд атрибутов:
ignoreCase : если имеет значение false, то правило учитывает регистр строки URL. По умолчанию имеет значение true, то есть регистр не учитывается.
В выше использованном примере в качестве Pattern использовался следующий несложный элемент:
Звездочка означает, что строка запроса может состоять из любых символов.
Определение условий
MatchAll : при таком значении для применения правила к URL должны быть соблюдены все условия
MatchAny : для применения правила к URL должно быть соблюдено хотя бы одно условие
Каждое отдельное условие задается с помощью элемента и настраивается с помощью следующих атрибутов:
pattern : определяет регулярное выражение, которому должен соответствовать объект
matchType : принимает следующие значения:
Pattern : в этом случае объект (в данном случае адрес URL) сопоставляется с выражением в атрибуте pattern. При других значениях атрибут pattern не учитывается
IsFile : определяет, является ли объект (адрес URL) файлом в файловой системе
IsDirectory : определяет, является ли объект (адрес URL) каталогом в файловой системе
ignoreCase : указывает, надо ли игнорировать регистр адреса URL. По умолчанию равно true, поэтому регистр не учитывается
negate : если равно true, то правило применяется, если условие НЕ учитывается. По умолчанию равно false
Определение действий
Rewrite : заменяет текущую строку запроса URL другой строкой
Redirect : выполняет редирект, посылая клиенту статусный код 3хх.
CustomResponse : отправляет клиенту определенный статусный код, а также может отправлять специфическое сообщение
AbortRequest : сбрасывает подключение для текущего клиента
Другие атрибуты элемента action:
url : строка, которая будет заменять текущую строку запроса URL
appendQueryString : определяет, должна ли сохраняться та часть строки запроса, которая идет после названия домена и порта. По умолчанию имеет значение true, что значит, что строка запроса со всеми параметрами за исключением названия домена будет сохраняться.
redirectType : статусный код переадресации при использовании типа Redirect (301 – Permanent, 302 – Found, 303 – See other, 307 – Temporary)
statusCode : определяет статусный код в качестве ответа клиенту при использовании типа CustomResponse
subStatusCode : определяет вспомогательный статусный код при использовании типа CustomResponse
statusReason : определяет сообщение, отправляемое клиенту вместе со статусным кодом при использовании типа CustomResponse
statusDescription : определяет сообщение, отправляемое клиенту в теле ответа при использовании типа CustomResponse
В нашем случае происходит переадресация:
При создании условия в атрибуте pattern используются две звездочки, которые инкапсулируют два сегмента до и после «www». Эти два сегмента передаются в действие

