2016-08-12 7 views
2

У меня есть клиент, который отправляет мне строку запроса, где несколько параметров начинаются с знака доллара ($). Я не могу начинать имена своих параметров в C# с $, что означает, что значения не отображаются при вызове моего действия.Обработка имен параметров строки запроса в ASP.NET Web API

Прежде чем кто-нибудь спросит, нет, я не могу заставить клиента изменить имя строки запроса.

У меня возникло ощущение, что мне нужно написать какой-то пользовательский фильтр действий, чтобы найти эти параметры, переименовать их и передать их правильному действию. Но, прежде чем я сделал все это, я хотел задать вопрос здесь, чтобы узнать, есть ли какое-то решение, которое мне не хватает.

Спасибо!

+0

какая версия веб-api? – derloopkat

ответ

0

К сожалению, $ не должны использоваться в качестве части имен параметров, так как он зарезервирован в определении URI

What does dollar sign $ do in url?

Таким образом, строка запроса вы получаете формально неверно, и самое лучшее решение было бы изменить его, поскольку будущие реализации Http или даже некоторые брандмауэры могут нарушить ваше решение.

работа вокруг будет переопределить строки запроса анализатор, и получить доступ к URI непосредственно, используя HttpRequest свойства Url (возможно, метод запроса) или RawUrl:

https://msdn.microsoft.com/en-us/library/system.web.httprequest.url(v=vs.110).aspx

https://msdn.microsoft.com/en-us/library/system.web.httprequest.rawurl(v=vs.110).aspx

+0

Эта новость придет как огромный шок для людей одата. – John

+0

Согласен ... Я был с командой, которая была частью определения OData примерно 10 лет назад, и это было поднято, но не продвинулось. –

0

В этом как я справился с проблемой:

[HttpGet, Route("myResource")] 
    public virtual IHttpActionResult GetThings() 
    { 
     var query = HttpUtility.ParseQueryString(Request.RequestUri.Query); 
     var queryParam = query["$myParam"]; 

     return Ok(); 
    } 
Смежные вопросы