Действие веб-API выполняется успешно, но я не вижу ответа в клиентском приложении

#c# #asp.net-mvc #asp.net-web-api #asp.net-web-api2

#c# #asp.net-mvc #asp.net-web-api #asp.net-web-api2

Вопрос:

Из ASP.NET Приложение MVC, я делаю запрос POST к действию в моем веб-API. Действие в API выполняется успешно. Когда я делаю тот же запрос в клиенте REST, таком как Postman для Chrome, я вижу действительный ответ Json.

Однако, если я выполняю вызов из своего приложения MVC, я не вижу никакого ответа, и поток управления исчезает после отправки запроса POST в API. Приложение MVC продолжает ждать, как будто.

Вот мой код.

Веб-API

 [HttpPost]
[ActionName("CreateNewUserFromAccountInfo")]
public IUser CreateNew(NewUserAccountInfo newUserAccountInfo)
{
    return _provider.CreateNew(newUserAccountInfo.FullName, newUserAccountInfo.Email, newUserAccountInfo.PasswordHash);
}
  

Контроллер приложения MVC

 IUser user = new WebAPIClient()
             .PostAsJsonAsync<NewUserAccountInfo, IUser>
              ("api/membership/CreateNewUserFromAccountInfo", 
              newUserAccountInfo
              ).Resu<
  

Из WebAPIClient класса из библиотеки классов, на которую ссылается приложение MVC:

 public async Task<R> PostAsJsonAsync<T, R>(string uri, T value)
{
    using (var client = new HttpClient())
    {
        client.BaseAddress = new Uri(_baseUri);

        client.DefaultRequestHeaders.Accept.Clear();
        client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));

        await PrintRequestBodyToDebugWindowAsync(value, new JsonMediaTypeFormatter());

        // The flow of control just disappears after this line
        // and never gets to the next line
        var response = await client.PostAsJsonAsync(uri, value);

        // The flow of control never gets here
        if (response.IsSuccessStatusCode) return await response.Content.ReadAsAsync<R>();
        else return default(R);
    }
}
  

РЕЗУЛЬТАТЫ ВОЗВРАЩАЮТСЯ ПРИ ЗАПРОСЕ, СДЕЛАННОМ ЧЕРЕЗ POSTMAN (клиент REST)

 Request Uri: http://localhost:54488/api/membership/CreateNewUserFromAccountInfo
Method: POST
Request Body: {"FullName":"Aamir Khan","Email":"aamir@khan.com","PasswordHash":"hello"}
Response:
{
    "Id": 15,
    "IsExternal": false,
    "ExternalId": null,
    "ExternalProviderName": null,
    "UserType": "Healthcare Seeker",
    "Verified": false,
    "VerificationCode": "375b8d2f-67df-433d-9e95-c84c30462b80",
    "VerificationCodeExpiresOn": "9999-12-31T23:59:59.9999999",
    "PasswordResetCode": null,
    "DefaultPasswordChanged": false,
    "HasFilledBasicProfile": false,
    "CreationDateTime": "2014-07-01T20:47:45.1405416 05:30",
    "FullName": {
        "Id": 2,
        "Name": "FullName",
        "Value": "Aamir Khan",
        "Description": null,
        "PrivacyLevel": {
            "Id": 1,
            "Name": "Private",
            "Description": "Visible only to me"
        }
    },
    "Email": {
        "Id": 1,
        "Name": "Email",
        "Value": "aamir@khan.com",
        "Description": null,
        "PrivacyLevel": {
            "Id": 1,
            "Name": "Private",
            "Description": "Visible only to me"
        }
    },
    "Profiles": [
        null,
        null,
        null
    ],
    "BasicProfile": null,
    "MedicalProfile": null,
    "EmergencyProfile": null
}
  

Комментарии:

1. Вы пробовали использовать Fiddler для проверки вашего HTTP-запроса?

2. @tia: Да? Я только что опубликовал ответ, который получил от Почтальона. Какой смысл делать это снова в Fiddler?

3. @WaterCoolerv2: Это помогло бы вам узнать, отправляет ли браузер запрос, и должен ли браузер получать тот же ответ, который вы получаете через Postman.

4. @StriplingWarrior: Это запрос POST. Я не уверен, как бы вы отправили его через браузер?

5. @WaterCoolerv2: Ах, это немного проясняет ситуацию. К вашему сведению, отправить HTTP-сообщение из браузера не сложно. Независимо от того, если вы используете Fiddler, вы должны иметь возможность сравнивать то, что отправляет и получает приложение MVC, с тем, что отправляет и получает Postman.