У меня есть WS, который я называю так:
HttpResponseMessage response = await client.PostAsync(url, new StringContent(json));
WS сгенерирует исключение (запрещено), и в моем приложении Blazor, сделавшем вызов PostAsync, я получу HttpResponseMessage
скод ответа 405, не уверен, почему его 405, это должно быть 403. (Почтальон возвращает 403).
Я включил CORS ( ServiceStack код):
Plugins.Add(new CorsFeature(allowedOrigins: "*",
allowedMethods: "GET, POST, PUT, DELETE, OPTIONS",
allowedHeaders: "*",
allowCredentials: true));
Это какой-то Console.Writeline, который я сделал, перед PostAsync:
Не удалось загрузить ресурс: сервер ответил со статусом405 ()
** ОБНОВЛЕНО **
Это два метода:
public async Task<TResponse> PostAsync<TResponse, TRequest>(string requestUri, TRequest request)
{
string url = GetUrl(requestUri);
Console.WriteLine("URI: " + url);
string json = JsonConvert.SerializeObject(request);
Console.WriteLine($"{url} | {json}");
HttpResponseMessage response = await client.PostAsync(url, new StringContent(json));
return await GetResponseOrThrowHttpException<TResponse>(response);
}
private async Task<T> GetResponseOrThrowHttpException<T>(HttpResponseMessage response)
{
Console.WriteLine($"GetResponseOrThrowHttpException: {response.StatusCode}");
string responseString = await response.Content.ReadAsStringAsync();
Console.WriteLine($"GetResponseOrThrowHttpException ContentStringResult: |{responseString}|");
if (!response.IsSuccessStatusCode)
{
Newtonsoft.Json.Linq.JObject jsonObject = Newtonsoft.Json.Linq.JObject.Parse(responseString);
string responseStatusString = jsonObject["ResponseStatus"].ToString();
Console.WriteLine($"GetResponseOrThrowHttpException 4: {responseStatusString}");
ResponseStatus responseStatus = JsonConvert.DeserializeObject<ResponseStatus>(responseStatusString);
Console.WriteLine($"Throwing HttpException: {response.StatusCode} {responseStatus.Message}");
throw new HttpException(response.StatusCode, responseStatus.Message);
}
return JsonConvert.DeserializeObject<T>(responseString);
}
Когда я пытаюсь получить строковое значение ответа,пусто:
string responseString = await response.Content.ReadAsStringAsync();
, а responseString
- пустая (длина 0) строка.
Если я выполняю точно такой же запрос в Postman, я получаю действительный ответ:
Итак, ответ JSON, показанный внизу на изображении выше, - это то, с чем я хочу работать в приложении Blazor, и проанализироватьэто как объект JSON и двигаться дальше.Я также отмечаю, что я получаю здесь ошибку 403, которую я ожидал, и в приложении Blazor я получаю 405.
Это проблема CORS, хотя я включил CORS на стороне WS?