ฉันได้รับ“ การตอบสนองความล้มเหลวของ Http สำหรับ (url ที่ไม่รู้จัก): 0 ข้อผิดพลาดที่ไม่รู้จัก” แทนข้อความแสดงข้อผิดพลาดจริงใน Angular


121

ฉันใช้ Angular 4 HttpClientเพื่อส่งคำขอไปยังบริการภายนอก เป็นการตั้งค่ามาตรฐานมาก:

this.httpClient.get(url).subscribe(response => {
  //do something with response
}, err => {
  console.log(err.message);
}, () => {
  console.log('completed');
}

ปัญหาคือเมื่อคำขอล้มเหลวฉันเห็นHttp failure response for (unknown url): 0 Unknown Errorข้อความทั่วไป ในคอนโซล ในขณะเดียวกันเมื่อฉันตรวจสอบคำขอที่ล้มเหลวใน chrome ฉันเห็นสถานะการตอบกลับเป็น 422 และในแท็บ "ดูตัวอย่าง" ฉันเห็นข้อความจริงที่ระบุสาเหตุของความล้มเหลว

ฉันจะเข้าถึงข้อความตอบกลับจริงที่เห็นในเครื่องมือ Chrome dev ได้อย่างไร

นี่คือภาพหน้าจอที่แสดงปัญหา: ใส่คำอธิบายภาพที่นี่


พยายามบันทึกerrวัตถุทั้งหมด- ไม่เพียง แต่message
Pavel Agarkov

ฉันประสบปัญหาเดียวกันและกำลังจะสร้างคำถามสำหรับเรื่องนี้เช่นกันนี่คือวัตถุที่ผิดพลาดทั้งหมด: gist.github.com/GO3LIN/7cffc3b0aa1f24d3e23e28cc907237fc
Mehdi Benmoha

1
หรือดีกว่า {"headers": {"normalizedNames": {}, "lazyUpdate": null, "headers": {}}, "status": 0, "statusText": "Unknown Error", "url": null, "ok": false, "name": "HttpErrorResponse", "message": "การตอบสนองความล้มเหลวของ HTTP สำหรับ (url ที่ไม่รู้จัก): 0 Unknown Error", "error": {"isTrusted": true}}
Mehdi Benmoha

@PavelAgarkov ไม่ได้เกี่ยวกับการบันทึกข้อความเท่านั้น HttpErrorResponse ที่ฉันเรียกคืนนั้นไม่มีข้อความแสดงข้อผิดพลาดที่แท้จริง นี่คือภาพหน้าจอของปัญหา คุณจะเห็นข้อผิดพลาดที่ฉันบันทึกมีข้อความว่า "... ข้อผิดพลาดที่ไม่รู้จัก ... " แต่เมื่อคุณดูตัวอย่างการตอบกลับคำขอด้านบนคุณจะเห็นข้อความที่มีความหมายจริง
grdl

คุณใช้พนักงานบริการหรือไม่?
Mackelito

คำตอบ:


97

ปัญหาที่เกี่ยวข้องกับธ ฉันสังเกตเห็นว่ามีข้อผิดพลาดอื่นในคอนโซล Chrome:

ไม่มีส่วนหัว "Access-Control-Allow-Origin" ในทรัพยากรที่ร้องขอ Origin ' http: // localhost: 4200 ' จึงไม่ได้รับอนุญาตให้เข้าถึง การตอบสนองมีรหัสสถานะ HTTP 422 "

ที่นี้หมายถึงการตอบสนองจากเซิร์ฟเวอร์แบ็กเอนด์ที่ขาดหายไปAccess-Control-Allow-Originส่วนหัวแม้ว่าแบ็กเอนด์ Nginx ถูกกำหนดค่าให้เพิ่มส่วนหัวเหล่านั้นเพื่อตอบสนองกับคำสั่งadd_header

อย่างไรก็ตามคำสั่งนี้จะเพิ่มส่วนหัวเมื่อโค้ดตอบกลับเป็น 20X หรือ 30X เท่านั้น เกี่ยวกับการตอบสนองข้อผิดพลาดส่วนหัวหายไป ฉันจำเป็นต้องใช้alwaysพารามิเตอร์เพื่อให้แน่ใจว่ามีการเพิ่มส่วนหัวโดยไม่คำนึงถึงรหัสตอบกลับ:

add_header 'Access-Control-Allow-Origin' 'http://localhost:4200' always;

เมื่อกำหนดค่าแบ็กเอนด์อย่างถูกต้องแล้วฉันสามารถเข้าถึงข้อความแสดงข้อผิดพลาดจริงในรหัสเชิงมุมได้


นอกจากนี้ลิงก์ต่อไปนี้จะเป็นประโยชน์สำหรับการเปิดใช้งาน CORS: docs.microsoft.com/en-us/aspnet/web-api/overview/security/…
Bobs

11
ควรเพิ่มบรรทัดนี้ที่ไหน
Omid Ataollahi

1
คุณจะเพิ่ม 'always' ลงในฟังก์ชัน express.js .use ได้อย่างไร? โดยทั่วไปโครงสร้างคือ app.use (function (req, res, next) {res.header ("Access-Control-Allow-Origin", " localhost: 4200" ); …}); ดังที่คุณเห็น res.header อนุญาตให้มีสองพารามิเตอร์ ... สตริงควบคุมและค่า ฉันพยายามเพิ่ม 'เสมอ' ด้วยวิธีต่างๆ แต่ดูเหมือนจะล้มเหลวทั้งหมด ข้อเสนอแนะใด ๆ ?
AppDreamer

@grdl แอดไลน์ add_header ตรงไหนดี?
sp4_venu

เพิ่มบรรทัดนี้ที่ไหน ฉันใช้ php สำหรับ api
Mustafa UYSAL

19

ในกรณีที่ใครก็ตามที่หลงทางเหมือนฉัน ... ปัญหาของฉันไม่ได้เกิดจาก CORS (ฉันควบคุมเซิร์ฟเวอร์ได้เต็มรูปแบบและ CORS ได้รับการกำหนดค่าอย่างถูกต้อง!)

ปัญหาของฉันเกิดจากฉันใช้แพลตฟอร์ม Android ระดับ 28 ซึ่งปิดใช้งานการสื่อสารเครือข่ายแบบเคลียร์เท็กซ์โดยค่าเริ่มต้นและฉันพยายามพัฒนาแอปที่ชี้ไปที่ IP ของแล็ปท็อปของฉัน (ซึ่งใช้เซิร์ฟเวอร์ API) URL ที่ฐาน API เป็นบางอย่างเช่นhttp: // [LAPTOP_IP]: 8081 เนื่องจากไม่ใช่https android webview จึงบล็อกเครือข่าย xfer ระหว่างโทรศัพท์ / โปรแกรมจำลองและเซิร์ฟเวอร์บนแล็ปท็อปของฉันอย่างสมบูรณ์ เพื่อแก้ไขปัญหานี้:

เพิ่มการกำหนดค่าความปลอดภัยเครือข่าย

ไฟล์ใหม่ในโปรเจ็กต์: resources / android / xml / network_security_config.xml

<?xml version="1.0" encoding="utf-8"?>
<network-security-config>
  <!-- Set application-wide security config -->
  <base-config cleartextTrafficPermitted="true"/>
</network-security-config>

หมายเหตุ:ควรใช้อย่างระมัดระวังเนื่องจากจะอนุญาตให้ใช้ข้อความเคลียร์ทั้งหมดจากแอปของคุณ (ไม่มีอะไรบังคับให้ใช้ https) คุณสามารถ จำกัด เพิ่มเติมได้หากต้องการ

อ้างอิง config ใน config.xml หลัก

<platform name="android">
    ...
    <edit-config file="app/src/main/AndroidManifest.xml" mode="merge" target="/manifest/application" xmlns:android="http://schemas.android.com/apk/res/android">
        <application android:networkSecurityConfig="@xml/network_security_config" />
    </edit-config>
    <resource-file src="resources/android/xml/network_security_config.xml" target="app/src/main/res/xml/network_security_config.xml" />
    ....
</platform>

แค่นั้นแหละ! จากนั้นฉันได้สร้าง APK ขึ้นมาใหม่และตอนนี้แอปสามารถสื่อสารได้จากทั้งโปรแกรมจำลองและโทรศัพท์

ข้อมูลเพิ่มเติมเกี่ยวกับวินาทีของเครือข่าย: https://developer.android.com/training/articles/security-config.html#CleartextTrafficPermitted


ขอบคุณตัน! ฉันยังใช้ URL "http" เปลี่ยนเป็น "https" และใช้งานได้ Btw เพียงแค่เปลี่ยน url เป็น https จะไม่ทำงานคุณต้องมีใบรับรองเพื่อจัดการกับสิ่งนั้น เซิร์ฟเวอร์ที่ฉันใช้รองรับทั้งสองอย่างมันจึงง่ายกว่าสำหรับฉัน ยังไงก็ตามขอบคุณตัน!
Xonshiz

1
ใช่ ... สำหรับฉันมันเกี่ยวกับ cleartext ด้วย .... เพราะฉันใช้http.. มันจะไม่มีปัญหาถ้าฉันใช้https.... แต่ในกรณีที่ฉันยังต้องการใช้httpฉันจะเพิ่มandroid:usesCleartextTraffic="true"ในapplicationแท็กAndroidManifest.xmlโดยตรง .. และมันใช้งานได้ .... ขอบคุณที่พูดถึงcleartext...
Syamsoul Azrien

ฉันจะเปิดใช้งานสิ่งนี้ใน Spring boot ได้อย่างไร ขออภัยหากคำถามไม่สำคัญเกินไป แต่ฉันเป็นมือใหม่และฉันไม่พบคำตอบใด ๆ ทางออนไลน์
Asma Rahim Ali Jafri

13

ทำงานให้ฉันหลังจากปิดส่วนขยายบล็อกโฆษณาใน Chrome บางครั้งข้อผิดพลาดนี้ปรากฏขึ้นเนื่องจากมีบางอย่างที่บล็อก http ในเบราว์เซอร์

ใส่คำอธิบายภาพที่นี่


1
สำหรับฉันมันคือ uBlock Origin ซึ่งบล็อกการดาวน์โหลดไฟล์ด้วย 'analytics' ในชื่อ
Marke

9

หากคุณกำลังใช้แอปพลิเคชั่น. NET Core โซลูชันนี้อาจช่วยได้!

ยิ่งไปกว่านั้นอาจไม่ใช่ข้อผิดพลาดเชิงมุมหรือคำขออื่น ๆในแอปพลิเคชันส่วนหน้าของคุณ

ขั้นแรกคุณต้องเพิ่มแพ็คเกจ Microsoft CORS Nuget:

Install-Package Microsoft.AspNetCore.Cors

จากนั้นคุณต้องเพิ่มบริการ CORS ใน startup.cs ของคุณ ในวิธี ConfigureServices ของคุณคุณควรมีสิ่งที่คล้ายกับสิ่งต่อไปนี้:

public void ConfigureServices(IServiceCollection services)
{
    services.AddCors();
}

จากนั้นเพิ่มมิดเดิลแวร์ CORS ในแอปของคุณ ใน startup.cs ของคุณคุณควรมีวิธีกำหนดค่า คุณต้องมีสิ่งนี้คล้ายกับสิ่งนี้:

public void Configure(IApplicationBuilder app, IHostingEnvironment env, 
ILoggerFactory loggerFactory)
{
    app.UseCors( options => 
    options.AllowAnyOrigin().AllowAnyMethod().AllowAnyHeader());
    app.UseMvc();
}

ตัวเลือกแลมบ์ดาเป็น API ที่คล่องแคล่วคุณจึงสามารถเพิ่ม / ลบตัวเลือกพิเศษที่คุณต้องการได้ คุณสามารถใช้ตัวเลือก“ AllowAnyOrigin” เพื่อยอมรับโดเมนใดก็ได้ แต่ขอแนะนำอย่างยิ่งว่าอย่าทำเช่นนี้เนื่องจากเป็นการเปิดการโทรข้ามต้นทางจากใครก็ตาม นอกจากนี้คุณยังสามารถ จำกัด การโทรข้ามแหล่งที่มาเป็นวิธี HTTP (GET / PUT / POST ฯลฯ ) ดังนั้นคุณจึงสามารถแสดงเฉพาะ GET การโทรข้ามโดเมนเป็นต้น


5

ข้อผิดพลาดนี้เกิดขึ้นกับฉันใน Firefox แต่ไม่ใช่ Chrome ในขณะที่พัฒนาในเครื่องและเกิดจาก Firefox ไม่ไว้วางใจใบรับรอง sslของ API ในพื้นที่ของฉัน(ซึ่งไม่ถูกต้อง แต่ฉันได้เพิ่มลงในที่เก็บใบรับรองในพื้นที่ของฉันซึ่งปล่อยให้ chrome เชื่อถือได้ แต่ไม่ใช่ ff) การนำทางไปยัง API โดยตรงและเพิ่มข้อยกเว้นใน Firefox ช่วยแก้ปัญหานี้ได้


1
ฉันได้อ่านคำตอบของ CORS หลายคำตอบและคำตอบแต่ละข้อไม่ได้ให้คำตอบเมื่อใช้ Firefox ฉันดูโพสต์นี้และคิดว่า "ไม่มีทางเป็นอย่างนี้หรอก แต่ฉันคิดไม่ออกว่ามันเป็นอย่างไร" และมันได้ผลแน่นอน ขอบคุณมาก!
Aaron Jordan

@frax ฉันมีกรณีเดียวกันเป๊ะ! ขอบคุณ! :)
W92

5

สำหรับฉันมันเกิดจาก JsonSerializerException ฝั่งเซิร์ฟเวอร์

มีข้อยกเว้นที่ไม่สามารถจัดการได้เกิดขึ้นขณะดำเนินการตามคำขอ Newtonsoft.Json.JsonSerializationException: ตรวจพบลูปการอ้างอิงตัวเองด้วยชนิด ...

ลูกค้ากล่าวว่า:

POST http://localhost:61495/api/Action net::ERR_INCOMPLETE_CHUNKED_ENCODING
ERROR HttpErrorResponse {headers: HttpHeaders, status: 0, statusText: "Unknown Error", url: null, ok: false, …}

การทำให้ประเภทการตอบกลับง่ายขึ้นโดยการกำจัดลูปช่วยแก้ปัญหาได้


2

หากคุณใช้ Laravel เป็นแบ็กเอนด์ของคุณให้แก้ไขไฟล์. htaccess ของคุณโดยเพียงแค่วางโค้ดนี้เพื่อแก้ปัญหา CROS ในโครงการ Angular หรือ IONIC ของคุณ

Header add Access-Control-Allow-Origin "*"
Header add Access-Control-Allow-Methods: "GET,POST,OPTIONS,DELETE,PUT"

6
คุณไม่ควรอนุญาต "*"! โดยทั่วไปคุณรู้ว่าใครกำลังคุยกับแบ็กเอนด์ของคุณและคุณควรกำหนดโฮสต์ของพวกเขาอย่างชัดเจน
itmuckel

@itmuckel แต่ถ้าคุณกำลังทำแอปสำหรับ Android โฮสต์จะไม่เป็นที่รู้จัก จะเป็นมือถือทุกเครื่องที่ใช้บริการของคุณใช่ไหม
Martin

2
เราจำเป็นต้องใช้ Cordova-plugin-advanced-http และ @ ionic / native wrapper เพื่อให้มีการโทร http จากอุปกรณ์โดยกำเนิดแทนที่จะใช้การโทร ajax บนเบราว์เซอร์ @Martin
user323774

2

ข้อผิดพลาดที่คล้ายกันอาจเกิดขึ้นได้เมื่อคุณไม่ได้ให้ใบรับรองไคลเอ็นต์และโทเค็นที่ถูกต้องซึ่งเซิร์ฟเวอร์ของคุณเข้าใจ:

ข้อผิดพลาด:

การตอบสนองความล้มเหลวของ HTTP สำหรับ (url ที่ไม่รู้จัก): 0 ข้อผิดพลาดที่ไม่รู้จัก

รหัสตัวอย่าง:

import { HttpClient, HttpHeaders } from '@angular/common/http';
import { Observable, throwError } from 'rxjs';
import { catchError, map } from 'rxjs/operators';

class MyCls1 {

  constructor(private http: HttpClient) {
  }

  public myFunc(): void {

    let http: HttpClient;

    http.get(
      'https://www.example.com/mypage',
      {
        headers:
          new HttpHeaders(
            {
              'Content-Type': 'application/json',
              'X-Requested-With': 'XMLHttpRequest',
              'MyClientCert': '',        // This is empty
              'MyToken': ''              // This is empty
            }
          )
      }
    ).pipe( map(res => res), catchError(err => throwError(err)) );
  }

}

โปรดทราบว่าทั้งสองMyClientCert& MyTokenเป็นสตริงว่างเปล่าดังนั้นข้อผิดพลาด
MyClientCert& MyTokenสามารถเป็นชื่อใดก็ได้ที่เซิร์ฟเวอร์ของคุณเข้าใจ


ฉันใช้รหัสนี้ในแอปไอออนิกของฉัน แอปไอออนิกของฉันใช้เป็นดัชนีในไซต์ของฉัน แต่เทคนิคนี้ช่วยฉันไม่ได้ ดูเหมือนว่า apis ของฉันใน laravel ต้องการการกำหนดค่าอาจเป็นใน ngnix หรือ laravel หรือโฮสต์นักเทียบท่าของฉัน ... ฉันใช้มิดเดิลแวร์ของ cors สำหรับ cors ที่เปิดใช้งานและทำงานบนโลคัลของฉันด้วย http แต่เมื่อใช้งานบนนักเทียบท่าไม่สามารถเรียก api ของฉันด้วย https
saber tabatabaee yazdi

เมื่อฉันเรียก apis ส่วนที่เหลือจาก http ซึ่งใช้งานได้ แต่เมื่อโทรไปที่ https พวกเขาไม่ตอบสนองต่อลูกค้าของฉัน และส่งกลับข้อผิดพลาดประเภทผสม ฉันคิดว่ามีข้อผิดพลาดของใบรับรองหรือบางอย่างเช่นการกำหนดค่า nginx หรือ. htaccess เนื่องจากฉันเพิ่มมิดเดิลแวร์ cors สำหรับ cors และทุกอย่างทำงานได้ดีโดยไม่มี https ลูกค้าของฉันโฮสต์บน http โทร http ผลลัพธ์ก็โอเค แต่เมื่อลูกค้าของฉันโฮสต์บน https และโทรผิดพลาด https เกิดขึ้น
saber tabatabaee yazdi

ตกลงวิธีแก้ปัญหาหนึ่งคือไปที่ https: // url ที่คุณมีและคลิกที่ไอคอนล็อคข้าง https ดาวน์โหลดใบรับรองไปยังไฟล์อ่านไฟล์นั้นผ่าน import / require / fs จากนั้นให้ / pass สตริงใบรับรองเพื่อเรียกไปยัง url จากนั้นจะใช้งานได้
Manohar Reddy Poreddy

2

ฉันใช้ ASP.NET SPA Extensions ซึ่งสร้างพร็อกซีให้ฉันบนพอร์ต 5000 และ 5001 ที่ส่งผ่านไปยังพอร์ต 4200 ของ Angular ในระหว่างการพัฒนา

ฉันได้ตั้งค่า CORS อย่างถูกต้องสำหรับพอร์ต https 5001 และทุกอย่างเรียบร้อยดี แต่ฉันไปที่บุ๊กมาร์กเก่าซึ่งใช้สำหรับพอร์ต 5000 โดยไม่ได้ตั้งใจทันใดนั้นข้อความนี้ก็เกิดขึ้น ตามที่คนอื่นพูดในคอนโซลมีข้อความแสดงข้อผิดพลาด "preflight"

ดังนั้นโดยไม่คำนึงถึงสภาพแวดล้อมของคุณหากคุณใช้ CORS ตรวจสอบให้แน่ใจว่าคุณมีพอร์ตทั้งหมดที่ระบุไว้ - เนื่องจากโฮสต์และพอร์ตมีความสำคัญทั้งคู่


2

ฉันได้รับข้อความนั้นทุกครั้งที่คำขอของฉันใช้เวลานานกว่า 2 นาทีจึงจะเสร็จสิ้น เบราว์เซอร์จะยกเลิกการเชื่อมต่อกับคำขอ แต่คำขอในแบ็กเอนด์จะดำเนินต่อไปจนกว่าจะเสร็จสิ้น เซิร์ฟเวอร์ (ASP.NET Web API ในกรณีของฉัน) ไม่พบการตัดการเชื่อมต่อ

หลังจากค้นหาทั้งวันในที่สุดฉันก็พบคำตอบนี้โดยอธิบายว่าหากคุณใช้การกำหนดค่าพร็อกซีจะมีระยะหมดเวลาเริ่มต้น 120 วินาที (หรือ 2 นาที)

ดังนั้นคุณสามารถแก้ไขการกำหนดค่าพร็อกซีของคุณและตั้งค่าเป็นสิ่งที่คุณต้องการ:

{
  "/api": {
    "target": "http://localhost:3000",
    "secure": false,
    "timeout": 6000000
  }
}

ตอนนี้ฉันใช้ agentkeepalive เพื่อให้ใช้งานได้กับการพิสูจน์ตัวตน NTLMและไม่รู้ว่าการหมดเวลาของตัวแทนไม่มีส่วนเกี่ยวข้องกับการหมดเวลาของพร็อกซีดังนั้นจึงต้องตั้งค่าทั้งสองอย่าง ฉันใช้เวลาสักพักกว่าจะรู้ตัวดังนั้นนี่คือตัวอย่าง:

const Agent = require('agentkeepalive');

module.exports = {
    '/api/': {
        target: 'http://localhost:3000',
        secure: false,
        timeout: 6000000,          // <-- this is needed as well
        agent: new Agent({
            maxSockets: 100,
            keepAlive: true,
            maxFreeSockets: 10,
            keepAliveMsecs: 100000,
            timeout: 6000000,      // <-- this is for the agentkeepalive
            freeSocketTimeout: 90000
        }),
        onProxyRes: proxyRes => {
            let key = 'www-authenticate';
            proxyRes.headers[key] = proxyRes.headers[key] &&
                proxyRes.headers[key].split(',');
        }
    }
};

2

สำหรับฉันมันเป็นปัญหาเกี่ยวกับเบราว์เซอร์เนื่องจากคำขอของฉันทำงานได้ดีในบุรุษไปรษณีย์

ปรากฎว่าด้วยเหตุผลบางประการ Firefox และ Chrome ได้บล็อกคำขอที่จะไปที่พอร์ต6000เมื่อฉันเปลี่ยนพอร์ต ASP.NET API เป็น4000เป็นข้อผิดพลาดก็เปลี่ยนเป็นข้อผิดพลาด CORS ที่ทราบซึ่งฉันสามารถแก้ไขได้

อย่างน้อย Chrome ก็แสดงให้ฉันเห็นERR_UNSAFE_PORTซึ่งให้เบาะแสเกี่ยวกับสิ่งที่อาจผิดพลาด


1

หากคุณมีส่วนหัวของคอร์ที่เหมาะสม เครือข่ายองค์กรของคุณอาจถูกถอดออกจากส่วนหัวของ cors หากเว็บไซต์สามารถเข้าถึงได้จากภายนอกให้ลองเข้าถึงจากภายนอกเครือข่ายของคุณเพื่อตรวจสอบว่าเครือข่ายเป็นสาเหตุของปัญหาหรือไม่ - เป็นความคิดที่ดีโดยไม่คำนึงถึงสาเหตุ


1

ในแกน asp.net หากคอนโทรลเลอร์ api ของคุณไม่มีคำอธิบายประกอบ[AllowAnonymous]ให้เพิ่มไว้เหนือชื่อคอนโทรลเลอร์ของคุณเช่น

[ApiController]
    [Route("api/")]
    [AllowAnonymous]
    public class TestController : ControllerBase

0

ไม่เก่าเหมือนคำถามอื่น ๆ แต่ฉันเพิ่งต่อสู้กับสิ่งนี้ในแอป Ionic-Laravel และไม่มีอะไรทำงานจากที่นี่ (และโพสต์อื่น ๆ ) ดังนั้นฉันจึงติดตั้งhttps://github.com/barryvdh/laravel-cors complement ใน Laravel และเริ่มต้นและทำงานได้ดี


0

ของฉันเกิดจากความสัมพันธ์ที่ไม่ถูกต้องในแบบจำลองที่ฉันพยายามค้นหา คิดออกโดยการดีบักการตอบสนองที่ล้มเหลวที่ความสัมพันธ์


0

สำหรับฉันมันไม่ใช่ปัญหาเชิงมุม เป็นฟิลด์ประเภท DateTime ใน DB ที่มีค่า (0000-00-00) และโมเดลของฉันไม่สามารถผูกคุณสมบัตินั้นได้ถูกต้องดังนั้นฉันจึงเปลี่ยนเป็นค่าที่ถูกต้องเช่น (2019-08-12)

ฉันใช้. net core, OData v4 และ MySql (EF pomelo connector)


0

เพิ่มรหัสนี้ในไฟล์การเชื่อมต่อของคุณ

header("Access-Control-Allow-Origin: *");
header("Access-Control-Allow-Methods: PUT,GET,POST,DELETE");
header("Access-Control-Allow-Headers: Origin, X-Requested-With, Content-Type, Accept");

0

หากนี่คือบริการโหนดให้ลองทำตามขั้นตอนที่ระบุไว้ ที่นี่

โดยทั่วไปเป็นข้อผิดพลาด Cross-Origin Resource Sharing (CORS) ข้อมูลเพิ่มเติมเกี่ยวกับข้อผิดพลาดดังกล่าวที่นี่

เมื่อฉันอัปเดตบริการโหนดของฉันด้วยบรรทัดต่อไปนี้มันใช้งานได้:

let express = require("express");
let app = express();

app.use(function(req, res, next) {
    res.header("Access-Control-Allow-Origin", "*");
    res.header("Access-Control-Allow-Headers", "Origin, X-Requested-With, Content-Type, Accept");    
    next();
  });

-2

ข้อผิดพลาดของฉันคือไฟล์มีขนาดใหญ่เกินไป (dotnet core ดูเหมือนจะมีขีด จำกัด ที่ ~ 25Mb) การตั้งค่า

  • maxAllowedContentLength ถึง 4294967295 (ค่าสูงสุดของ uint) ใน web.config
  • การตกแต่งแอ็คชันคอนโทรลเลอร์ด้วย [DisableRequestSizeLimit]
  • services.Configure (ตัวเลือก => {options.MultipartBodyLengthLimit = 4294967295;}); ใน Startup.cs

แก้ปัญหาให้ฉัน

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.