Ответ 1
Будет ли добавлена работа с косой чертой для вашего сценария?
http://localhost:33021/api/employees/[email protected]/
У меня есть 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]
Следующие работы:
http://localhost:1080/api/employees/[email protected]
http://localhost:1080/api/employees/[email protected]
http://localhost:1080/api/[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>
Будет ли добавлена работа с косой чертой для вашего сценария?
http://localhost:33021/api/employees/[email protected]/
Проверьте настройки 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>
Это то, что сработало для меня:
Я работал на 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, в закодированной форме.