Web API 1 и маршрутизация

Я сделал проект, используя web api 2, но потом узнал, что сервер работает под управлением 2003. Поэтому я сейчас воссоздаю проект, используя web api 1 (.net 4).

Я размещаю маршрутизацию в App_Start\WebApiConfig

 config.Routes.MapHttpRoute(
    name: "ContactApi",
    routeTemplate: "api/{controller}/{email}/{firstname}/{lastname}/{source}"
 );

URL, который я использую,

http://localhost:64470/api/Contacts/GetId?email=user5@company.com&firstname=joe&lastname=user&source=wer

Это работало нормально в веб-API 2, но я получаю следующую ошибкуРесурс не может быть найден

Вот некоторые части класса контроллера

 public class ContactsController : ApiController
 public string GetId(string email, string firstname, string lastname, string source)

Есть идеи, что мне не хватает?

2 ответа

Ваш шаблон маршрута требует, чтобы параметры {email}, {firstName}, {lastName} и {source} были в пути URI. Замените свой маршрут с кодом ниже

config.Routes.MapHttpRoute(
    name: "ContactApi",
    routeTemplate: "api/{controller}"
);

И он должен достигать вашего метода GetId - параметры строки запроса не нужно указывать в маршруте.

Для вызова действия с URL-адресом, который вы используете, вам потребуется маршрут:

config.Routes.MapHttpRoute(
    name: "ActionApi",
    routeTemplate: "api/{controller}/{action}"
);

Лично я бы не стал этого делать. Я бы просто использовал маршрут по умолчанию:

config.Routes.MapHttpRoute(
    name: "DefaultApi",
    routeTemplate: "api/{controller}/{id}",
    defaults: new { id = RouteParameter.Optional }
);

и затем вызовите APi, используя следующий URL:

http://localhost:64470/api/Contacts?email=user5@company.com&firstname=joe&lastname=user&source=wer
Другие вопросы по тегам