ОК, здесь много чего происходит, поэтому я постараюсь сохранить свой вопрос и примеры как можно проще.Имея это в виду, пожалуйста, спросите, нужна ли вам какая-либо дополнительная информация или разъяснения.
Код
У меня есть проект Web API 2, который имеет рядконтроллеры и действия.Конкретное действие, с которым у меня возникают проблемы, определяется в ContactController следующим образом:
[HttpPost]
public MyModel GetSomething(System.Nullable<System.Guid> uid)
{
return GetMyModel(uid);
}
Если это имеет значение, моя маршрутизация настраивается следующим образом:
config.Routes.MapHttpRoute(
name: "DefaultApi",
routeTemplate: "api/{controller}/{action}/{id}",
defaults: new { controller = "Home", action = "Index", id = RouteParameter.Optional }
);
Теперь у меня есть другой проект, который требуется для вызова вышеуказанного действия.Для вызова веб-API я использую HttpClient .Обратите внимание, что у меня есть много других вызовов действий, которые работают правильно, поэтому это не проблема с подключением.
Код, который я использую для вызова метода Web API, выглядит следующим образом:
using (HttpClient client = GetClient())
{
var obj = new List<KeyValuePair<string, string>> { new KeyValuePair<string, string>("uid", someGuid.ToString()) };
var response = client.PostAsync(path, new FormUrlEncodedContent(obj)).Result;
return response.Content.ReadAsAsync<T>().Result;
}
В данном случае path
в основном:
localhost: 12345 / api / contact / getsomething
Проблема
PostAsync
вызов Result
(т. Е. response
в приведенном выше коде) выдает это сообщение:
{StatusCode: 404, ReasonPhrase: 'Not Found', версия: 1.1, содержание: System.Net.Http.StreamContent, заголовки: {Pragma: нет-кэша X-исходников,: = UTF-8 B QzpcRGV2ZWxvcG1lbnRcUHJvamVjdHNcTGltYVxMaW1hIHYzXERFVlxMaW1hRGF0YVNlcnZpY2VcYXBpXHVzZXJhY2Nlc3NcZ2V0bW9kdWxlc2FjY2Vzcw == = Cache-Control:?? нет кэша Дата: Пт, 18 мая 201810:25:49 GMT Сервер: Microsoft-IIS / 10.0 X-AspNet-версия: 4.0.30319 X-Powered-By: ASP.NET Длина содержимого: 222 Тип содержимого: приложение / json;charset = utf-8 Истекает: -1}}
Если я ставлю точку останова внутри aciton, то она не срабатывает.Однако, что я нахожу странным, так это то, что, когда я вызываю его, Visual Studio (2018) сообщает мне, что конкретное действие имеет «неудавшийся запрос» на это конкретное действие.Так ясно, что он должен знать, какой метод я пытаюсь вызвать?
На данный момент у меня заканчиваются идеи о том, как отлаживать дальше.Что я тут не так делаю?