Подтвердить что ты не робот

ApiController возвращает 404, когда идентификатор содержит период

У меня есть ApiController, и я хочу использовать адреса электронной почты в качестве параметра ID для запросов:

// GET api/employees/[email protected]
public CompactEmployee Get(string id) {
   var email = id;
   return GetEmployeeByEmail(email);
}

Однако я не могу заставить это работать (возвращает 404):

http://localhost:1080/api/employees/[email protected]

Следующие работы:

Я установил relaxedUrlToFileSystemMapping="true" в свой web.config как подробно Фил Хаак.

Мне очень понравился бы полный адрес электронной почты для работы, но в любой момент, за которым следует какой-либо другой символ, запрос возвращает 404. Любая помощь будет принята с благодарностью!

Решение

Из-за отсутствия других вариантов я направился в направлении, предложенном Мэгги, и использовал ответ из этого вопроса, чтобы создать правило перезаписи для автоматического добавления trailing slash, когда мне нужно отправить по электронной почте URL-адрес.

<system.webServer>
  ....   
  <rewrite>
    <rules>
      <rule name="Add trailing slash" stopProcessing="true">
        <match url="^(api/employees/.*\.[a-z]{2,4})$" />
        <action type="Rewrite" url="{R:1}/" />
      </rule>
    </rules>
  </rewrite>
</system.webServer>
4b9b3361

Ответ 1

Будет ли добавлена ​​работа с косой чертой для вашего сценария?

http://localhost:33021/api/employees/[email protected]/

Ответ 2

Проверьте настройки IIS:

Home Directory -> Configuration

Отредактируйте расширение приложения .aspx и убедитесь, что параметр Verify that file exists выключен.

UPDATE

Я только что протестировал проект MVC4 по веб-интерфейсу по умолчанию

URL: http://localhost:10983/api/values/[email protected]

Действие в ValuesController:

public string Get(string id)
{
    return id;
}

Это был ответ:

<string xmlns="http://schemas.microsoft.com/2003/10/Serialization/">[email protected]</string>

Ответ 3

Это то, что сработало для меня:

Я работал на targetFramework = 4.6.1. Я обновил до 4.6.2 и добавил это в web.config:

<system.web>
        <customErrors mode="Off"/>
        <compilation debug="true" targetFramework="4.6.2"/>
        <!-- This will allow to search for stuff that contains . & etc.-->
        <httpRuntime targetFramework="4.6.2" maxRequestLength="100000" maxUrlLength="2048" relaxedUrlToFileSystemMapping="true" requestPathInvalidCharacters=""/>
  </system.web>

requestPathInvalidCharacters="" должен иметь возможность, например, иметь такие requestPathInvalidCharacters="" как & etc в URI, в закодированной форме.