<script type="text/javascript">
$(function () {
var settings = {
"async": true,
"crossDomain": true,
"url": "http://192.168.1.60/ISAPI/System/Video/inputs/channels/1/overlays/text",
"method": "PUT",
"headers": {
"Access-Control-Allow-Origin": "*",
"Authorization": "Basic YWRtaW46enp4eTEyMzQ1Ng==",
"cache-control": "no-cache",
"Postman-Token": "0c288f09-09c6-4088-b79b-c969b2833124"
},
"data": " <TextOverlayList size=\"500\"> <TextOverlay> <id>1</id> <enabled>true</enabled> <positionX>10</positionX> <positionY>70</positionY> <displayText>東風4-1868 11/小時 DK200+509</displayText> </TextOverlay> </TextOverlayList>"
}
$.ajax(settings).done(function (response) {
layer.msg("<span style='color:#ffffff;'>己更新!</span>");
});
});
</script>
執行上段代碼提示:(上面代碼是下面的C#轉換,通過POSTman執行是沒問題的,但放在瀏覽器就不行了,客戶端 又不能安裝IIS服務器編譯aspx檔案。)怎么解決?
http://192.168.1.60/ISAPI/System/Video/inputs/channels/1/overlays/text 401 (Unathorized)
'Access-Control-Allow-Origin' header is present on the requested resource.
下面的C#執行沒問題,我需要在客戶端JS腳本運行成功,因為是局域網IP。
string URI = "http://192.168.1.60/ISAPI/System/Video/inputs/channels/1/overlays/text";
Stream outstream = null;
Stream instream = null;
StreamReader sr = null;
//新版定義HTTP的請求,不能用new,https://msdn.microsoft.com/zh-cn/library/system.net.httpwebresponse(v=vs.110).aspx
HttpWebRequest req = (HttpWebRequest)WebRequest.Create(URI);
// 要注意的這是這個編碼方式,還有內容的Xml內容的編碼方式
Encoding encoding = Encoding.GetEncoding("UTF-8");
byte[] data = System.Text.Encoding.UTF8.GetBytes(xmlPath);
req.Method = "PUT";
req.ContentType = "text/plain;charset=UTF-8";
//添加用戶名密碼完成Authorization認證
string username = "admin";
string password = "zzxy123456";
string userPasswd = username + ":" + password;
CredentialCache mycache = new CredentialCache();
mycache.Add(new Uri(URI), "Basic", new NetworkCredential(username, password));
req.Credentials = mycache;
req.Headers.Add("Authorization", "Basic " + Convert.ToBase64String(new ASCIIEncoding().GetBytes(userPasswd)));
//發送內容
outstream = req.GetRequestStream();
outstream.Write(data, 0, data.Length);
outstream.Flush();
outstream.Close();
HttpWebResponse res = (HttpWebResponse)req.GetResponse();
//接收NVR回傳資料資訊
res = req.GetResponse() as HttpWebResponse;
//直到req.GetResponse()程式才開始向目標網頁發送Post請求
instream = res.GetResponseStream();
sr = new StreamReader(instream, encoding);
//回傳結果網頁代碼
string content = sr.ReadToEnd();
Console.Write(content);
Console.Read();
uj5u.com熱心網友回復:
"crossDomain": true,這個沒有對應翻譯,畢竟她宣告了是跨域訪問。你目前回傳的也是“'Access-Control-Allow-Origin”跨域訪問失敗
所以你再提交時候,請再頭部區域加入:Access-Control-Allow-Origin標記
uj5u.com熱心網友回復:
是這樣加在html頭部嗎?head之間<meta http-equiv="Access-Control-Allow-Origin" content="*" />
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Access-Control-Allow-Origin" content="*" />
<title>************</title>
<script src="https://bbs.csdn.net/TrainDB/Scripts/jquery-1.10.2.min.js"></script>
<script src="https://bbs.csdn.net/TrainDB/Scripts/layer/layer.js"></script>
<style>
</style>
</head>
<body>
<form id="aspnetForm" runat="server">
<script type="text/javascript">
$(function () {
var settings = {
"async": true,
"crossDomain": true,
"url": "http://192.168.1.60/ISAPI/System/Video/inputs/channels/1/overlays/text",
"method": "PUT",
//"dataType": "jsonp",
"headers": {
"Access-Control-Allow-Origin": "*",
"Access-Control-Allow-Methods": "POST,GET,PUT",
"Authorization": "Basic YWRtaW46enp4eTEyMzQ1Ng==",
"cache-control": "no-cache",
"Postman-Token": "0c288f09-09c6-4088-b79b-c969b2833124"
},
"data": " <TextOverlayList size=\"500\"> <TextOverlay> <id>1</id> <enabled>true</enabled> <positionX>10</positionX> <positionY>70</positionY> <displayText>東風4-1868 11/小時 DK200+509</displayText> </TextOverlay> </TextOverlayList>"
}
$.ajax(settings).done(function (response) {
layer.msg("<span style='color:#ffffff;'>己更新!</span>");
});
</script>
</form>
</body>
</html>
uj5u.com熱心網友回復:
需要兩段
crossDomain: true,
xhrFields: {withCredentials: true},
。。。。
uj5u.com熱心網友回復:
還是不行
uj5u.com熱心網友回復:
在headers在添加一個試試看
"Access-Control-Allow-Headers": "*",
uj5u.com熱心網友回復:
跨域了,出現 Access-Control-Allow-Origin 表示 服務器沒有對跨域做處理,瀏覽器拒絕了你的回應跨域要在 服務器 Response 設定 頭部 "Access-Control-Allow-Headers": "*" 放行,瀏覽器端正常請求即可
uj5u.com熱心網友回復:
需要兩段
crossDomain: true,
xhrFields: {withCredentials: true},
。。。。
還是不行
在headers在添加一個試試看
"Access-Control-Allow-Headers": "*",
var settings = {
async: true,
crossDomain: true,
xhrFields: { withCredentials: true },
url: "http://192.168.1.60/ISAPI/System/Video/inputs/channels/1/overlays/text",
method: "PUT",
headers: {
"Access-Control-Allow-Origin": "*",
"Access-Control-Allow-Methods": "POST,GET,PUT",
"Access-Control-Allow-Headers': 'x-requested-with,content-type",
"Authorization": "Basic YWRtaW46enp4eTEyMzQ1Ng==",
"cache-control": "no-cache",
"Postman-Token": "0c288f09-09c6-4088-b79b-c969b2833124"
},
"data": " <TextOverlayList size=\"500\"> <TextOverlay> <id>1</id> <enabled>true</enabled> <positionX>10</positionX> <positionY>70</positionY> <displayText>東風4-1868 11/小時 DK200+509</displayText> </TextOverlay> </TextOverlayList>"
}
$.ajax(settings).done(function (response) {
layer.msg("<span style='color:#ffffff;'>己執行!</span>");
});
html的head標簽也加了
<head>
<meta http-equiv="Access-Control-Allow-Origin" content="*" />
</head>
我是這樣做的,不行。
uj5u.com熱心網友回復:
跨域了,出現 Access-Control-Allow-Origin 表示 服務器沒有對跨域做處理,瀏覽器拒絕了你的回應
跨域要在 服務器 Response 設定 頭部 "Access-Control-Allow-Headers": "*" 放行,瀏覽器端正常請求即可
被樓上帶偏了,應該加 Access-Control-Allow-Origin
uj5u.com熱心網友回復:
錯誤提示:
jquery-1.10.2.min.js:23 OPTIONS http://192.168.1.60/ISAPI/System/Video/inputs/channels/1/overlays/text 401 (Unauthorized)
Access to XMLHttpRequest at 'http://192.168.1.60/ISAPI/System/Video/inputs/channels/1/overlays/text' from origin 'http://192.168.1.112' has been blocked by CORS policy: Response to preflight request doesn't pass access control check: No 'Access-Control-Allow-Origin' header is present on the requested resource.
uj5u.com熱心網友回復:
跨域了,出現 Access-Control-Allow-Origin 表示 服務器沒有對跨域做處理,瀏覽器拒絕了你的回應
跨域要在 服務器 Response 設定 頭部 "Access-Control-Allow-Headers": "*" 放行,瀏覽器端正常請求即可
被樓上帶偏了,應該加 Access-Control-Allow-Origin
問題是 服務器 http://192.168.1.60 就硬體的地址,無法在它的網頁里加 Access-Control-Allow-Origin
uj5u.com熱心網友回復:
跨域了,出現 Access-Control-Allow-Origin 表示 服務器沒有對跨域做處理,瀏覽器拒絕了你的回應
跨域要在 服務器 Response 設定 頭部 "Access-Control-Allow-Headers": "*" 放行,瀏覽器端正常請求即可
被樓上帶偏了,應該加 Access-Control-Allow-Origin
問題是 服務器 http://192.168.1.60 就硬體的地址,無法在它的網頁里加 Access-Control-Allow-Origin
不是在網頁里加,是在你服務器的回應頭里面加 或者在iis 里面加
uj5u.com熱心網友回復:
IIS加了也不起作用uj5u.com熱心網友回復:
iis要設定允許跨域訪問才行uj5u.com熱心網友回復:
https://blog.csdn.net/hanjun0612/article/details/51799996uj5u.com熱心網友回復:
iis要設定允許跨域訪問才行uj5u.com熱心網友回復:
我把具體應用場景說一下:一臺在郊外移動的汽車,車上安裝了海康攝像頭和安裝有安卓作業系統的工控機,工控機里有我寫的JS程式,用http://192.168.1.60/ISAPI/System/Video/inputs/channels/1/overlays/text 可以寫資料到攝像頭上,也就是說只能在局域網訪問才能成功。這個攝像頭的API是無法進入修改,也沒有IIS服務器。我的c#代碼是用我的筆記本電腦直接連接攝像頭可以訪問成功,換成JS就跨域失敗,我想只能用過JS在客戶端訪問局域網攝像頭的API才可以成功。
uj5u.com熱心網友回復:
加了 Access-Control-Allow-Origin 后,又報了什么錯呢?uj5u.com熱心網友回復:
加了 Access-Control-Allow-Origin 后,又報了什么錯呢?
還是一樣的錯誤, http://192.168.1.60/ISAPI/System/Video/inputs/channels/1/overlays/text 401 (Unauthorized)
Access to XMLHttpRequest at 'http://192.168.1.60/ISAPI/System/Video/inputs/channels/1/overlays/text' from origin 'http://192.168.1.112' has been blocked by CORS policy: Response to preflight request doesn't pass access control check: No 'Access-Control-Allow-Origin' header is present on the requested resource.
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/52398.html
標籤:ASP.NET
上一篇:.dat檔案的匯入
