簡體   English   中英

如何在javascript中將json對象發送到asp.net?

[英]how to send json object to asp.net in javascript?

我試圖用javascript中的json字符串/對象調用asp.net控制器方法。

asp.net控制器:

public class HomeController : Controller
{

     public ActionResult doWork(string data) {
          // dowork..
          return new EmptyResult();
     }
}

並在JavaScript中是:

var XHR=new XMLHttpRequest();
XHR.open("GET", 'http://localhost:58476/home/dowork', true);
XHR.setRequestHeader("Accept","application/json");
XHR.onreadystatechange = function () {
    if (XHR.readyState == 4 && XHR.status == 200) {
        alert('ok');
    }else{
        alert('not ok');

    }
};
XHR.send(JSON.stringify(queryResult));

如果運行javascripts,它將在asp.net中調用dowork方法,但數據為空。 在de onreadystatechange中,它正在調用'not ok'-alert。

在我的控制台日志中,我發現錯誤:

XMLHttpRequest無法加載http:// localhost:58476 / home / dowork 請求的資源上不存在“Access-Control-Allow-Origin”標頭。 因此不允許來源' http:// localhost:8081 '訪問。

有人知道如何解決這個問題嗎?

一個簡單的解決方案是添加Access-Control-Allow-Origin。
您可以將其添加到web.config文件中,如:

<system.webServer>
    <httpProtocol>
      <customHeaders>
        <add name="Access-Control-Allow-Origin" value="*" />
      </customHeaders>
    </httpProtocol>
</system.webServer>

此外,您只能在POST請求上發送數據,而您正在執行GET請求。 有關發送方法檢查w3schools的更多信息
這意味着您必須將XHR.Open方法更改為XHR.open("POST", 'localhost:58476/home/dowork', true);

顯然,javascript代碼正在向其他服務器發送請求,該請求最初是從最初加載頁面的服務器發送的。

第一個服務器正在偵聽端口8081,另一個正在偵聽端口58476。

由於同源策略 ,您無法將AJAX請求發送到托管JS腳本的服務器以外的任何服務器。

雖然您可以關閉此安全功能,但不建議將其關閉,除非您記住任何人都可以在您的頁面中注入Javascript代碼並使其向服務器發送可能包含敏感數據(如身份驗證Cookie)的請求。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM