2015-02-11 2 views
2

У меня есть сайт ASP.Net MVC, на котором запущен ServiceStack v3.9.71. У меня есть новый API ServiceStack, который настроен на доступность по адресу ~/api/*, но вам нужно перенаправить запросы POST из старых мест ~/service/* в новый API, но я откладываю.Redirect Legacy Post to ServiceStack API

Я пробовал использовать перенаправления URL, но при этом POST становится GET и данные POST теряются.

<rule name="GetVenuesByLocation" stopProcessing="true"> 
    <match url="^service/getvenuelistbylocation/$" /> 
    <action redirectType="Temporary" type="Redirect" url="/api/VenueListByLocation" /> 
</rule> 

Возможно ли это, и если бы это было возможно, пожалуйста, укажите мне в правильном направлении?

Спасибо, Саймон

+0

Вы можете просто проксировать запрос в старом URI на новый URI с помощью вызова HttpClient на стороне сервера. –

+1

Можете ли вы использовать вкладку «Fiddler» или «Сеть» в панели инструментов разработчика вашего браузера, чтобы убедиться, что HTTP 307 происходит, когда вы посещаете «/ service/getvenuelistbylocation». Согласно (IIS 6) [this] (http://www.microsoft. com/technet/prodtechnol/WindowsServer2003/Library/IIS/2175ec7d-b2a9-4f2c-821a-b6539b88902e.mspx? mfr = true) и (IIS 7) [это] (https://technet.microsoft.com/en-us /library/cc770393%28v=ws.10%29.aspx) HTTP 307 Временные перенаправления Веб-браузер должен переиздать POST с данными. – paaschpa

+0

@paaschpa Кажется, что по какой-то причине 301 Redirect встречается до 307, что может объяснить потерю значений post. Но почему 301? Результатом является a 301, за которым следует 307, за которым следует 404. 404 выбрасывается из-за отсутствия действия для запроса GET. – ProNotion

ответ

2

Ответ и обсуждение в комментариях. Добавление ответа, чтобы другие могли найти решение.

Правило временного перезаписи (в пределах вопроса) является правильным и будет выполнять 307 POST, сохраняя исходные значения.

Проблема была в уже существующем правиле перезаписи переадресации, создала 301 до того, как попала в правило временного перезаписи. 301 потеряет данные.

Per ProNotion - выясняется, что правило правильное, но оно необходимо добавить перед правилом, которое заставляет трейлинг-косые черты. Затем он работает с косой чертой или без нее!