我有一个这样的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));
这是我在PostAsync之前所做的一些Console.Writeline:
无法加载资源:服务器的响应状态为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应用程序中使用它)是我想在Blazor应用程序中使用的,并将其解析为JSON对象并从那里继续前进。 我还注意到,我在这里遇到了403错误,这是我所期望的,在Blazor应用中,我得到了405错误。
即使我在WS端启用了CORS,这也是CORS问题吗?
答案 0 :(得分:3)
我想您的内容应该这样发布:
new StringContent(json, Encoding.UTF8, "application/json")
即使这不是造成您痛苦的原因,最好还是这样使用...
希望这对您有帮助...
答案 1 :(得分:1)
验证您是否为域设置了正确的CORS配置。
看来您是从Blazor应用程序中调用了另一个import 'react-native'
import renderer from 'react-test-renderer'
import { App } from './app'
import React from 'react'
test('renders correctly', () => {
const tree = renderer.create(
<App />
)
expect(tree).toBeDefined()
})
组合。即使使用此C#,浏览器内部的所有安全规则仍然适用。