配置了cors中間件。
services.AddCors(options =>
{
options.AddPolicy(name: CorsPolicies.PortfolioPolicy,
builder =>
{
builder.WithOrigins("http://localhost:44376")
.AllowAnyHeader()
.AllowAnyMethod()
.AllowCredentials()。
});
});
在Configure(...)中的UseRouting()中間件之后添加
app.UseCors(CorsPolicies.PortfolioPolicy)。
而在我的控制器中
[ApiController] [EnableCors(CorsPolicies.PortfolioPolicy)
[EnableCors(CorsPolicies.PortfolioPolicy)] 。
[Route("api/portfolio")] 。
public class PortfolioController : ControllerBase
{
....
}
然而,我的瀏覽器似乎不允許這個請求通過。
在我的客戶端應用程式(react app)中,呼叫是這樣進行的。
fetch(`${process.env.REACT_APP_API_URL}/api/portfolio`)
.then(response => {
return response.json();
})
.then((data) => {
return setAPIData(data.data);
})
這樣做的結果是:
我不明白的是,為什么它在 asp.net core 2.1 中起作用,我有另一個使用相同配置模式的專案,而且在那個專案中,一切似乎都在按預期作業。另外,如果我使用AllowAnyOrigin(),它也能作業。從原點'http://localhost:32360/api/portfolio'獲取資料的權限 'http://localhost:44376'被 CORS 策略阻止了。沒有 'Access-Control-Allow-Origin'頭存在于請求的資源上。 資源。如果一個不透明的回應符合你的需要,將請求的 模式設定為'no-cors',以便在禁用 CORS 的情況下獲取該資源。
uj5u.com熱心網友回復:
你正在設定AllowCredentials(),似乎沒有發送任何證書。如果你沒有任何憑證,就把它洗掉。
請在這里閱讀更多關于這個問題的內容。Docs
uj5u.com熱心網友回復:
我在.Net5.0中也有同樣的問題。你需要用下面的例子來改變你的客戶端獲取請求,你所參考的MS檔案中也提到了這一點
來自MS檔案中的Allowcredentialsfetch()
fetch('https://www.example.com/api/test', {
憑證:'包括
});
如果瀏覽器發送了證書,但是回應中沒有包括一個 有效的 Access-Control-Allow-Credentials 頭,那么瀏覽器就不會 將回應暴露給應用程式,并且跨源請求失敗。
允許跨源憑證是一種安全風險。一個網站在 另一個域的網站可以將已登錄用戶的憑據發送到應用程式上,而不需要用戶代表 在用戶不知情的情況下,代表該用戶向應用程式發送證書。CORS規范 還指出,如果將起源設定為 "*"(所有起源)是無效的。
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/311775.html
標籤:
