Der IFrame befindet sich in einer benutzerdefinierten Visualisierung in PowerBI.
In Global.asax habe ich diesen Code:
AntiForgeryConfig.SuppressXFrameOptionsHeader = true;
In meinem Controller habe ich Folgendes entfernt:
[ValidateAntiForgeryToken]
Meiner Ansicht nach habe ich Folgendes entfernt:
@Html.AntiForgeryToken()
Beim Posten erhalte ich diese Antwortfehler
OPTIONEN https://myurl/Edit/707057500079987300 401 (Nicht autorisiert )
Antwort auf eine Preflight-Anfrage besteht die Zugriffskontrollprüfung nicht: Auf der angeforderten Ressource ist kein Header „Access-Control-Allow-Origin“ vorhanden. Der Zugriff auf Origin „null“ ist daher nicht gestattet. Die Antwort hatte den HTTP-Statuscode 401.
Ich habe meinen Controller und meine Ansicht geändert, um eine GET-Anfrage zu verwenden. Aber das gleiche Ergebnis, http-Fehler 401.
Mein Ziel ist nicht, dass Site A mit Site B interagiert, sondern es nur anzuzeigen.
Site B, meine ASP.NET MVC-App, soll einige serverseitige Aufgaben erledigen und das Ergebnis anzeigen.
Durch Festlegen von AntiForgeryConfig.SuppressXFrameOptionsHeader = true und Die Bestätigung, dass ich dachte, meine Ziele seien entfernt, wurde entfernt machbar.
Die Anfrage:
OPTIONS /AENettMicrofunctions/InstantReading/GetDetails/707057500079332843 HTTP/1.1
Host: aensmartgrid.ae.no
Connection: keep-alive
Access-Control-Request-Method: GET
Origin: null
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/65.0.3325.181 Safari/537.36
Access-Control-Request-Headers: x-requested-with
Accept: */*
Accept-Encoding: gzip, deflate, br
Accept-Language: nb-NO,nb;q=0.9,no;q=0.8,nn;q=0.7,en-US;q=0.6,en;q=0.5
Die Antwort
HTTP/1.1 200 OK
Cache-Control: private
Content-Type: text/html; charset=utf-8
Server: Microsoft-IIS/8.5
X-AspNetMvc-Version: 5.2
X-AspNet-Version: 4.0.30319
Persistent-Auth: true
X-Powered-By: ASP.NET
Date: Thu, 21 Jun 2018 13:59:02 GMT
ntCoent-Length: 5015
Content-Encoding: gzip
Content-Length: 1651
Wie unten vorgeschlagen, habe ich Folgendes zu web.config hinzugefügt
Was mache ich hier falsch?
Warum ist das http-Verb OPTION, wenn es in der jQuery eindeutig ein GET ist? Was fehlt mir?
Der Code für meine Ansicht ist unten.
Grüße
Frode
@model AE.Net.MicrofunctionViews.Models.InstantReadingRequest
@{
ViewBag.Title = "Momentanavlesning spenning";
}
@Html.ValidationSummary(false, "", new { @class = "text-danger" })
@Html.Label("model.UsagePoint", "Målepunkt: ")
@Html.DisplayFor(model => model.UsagePoint)
@Html.HiddenFor(model => model.UsagePoint, "UsagePointId")

@Html.Label("model.ReadingResult", "Resultat: ")


@Html.TextAreaFor(model => model.ReadingResult, new { @cols = "50", @rows = "4" })
@section Scripts {
@Scripts.Render("~/bundles/jqueryval")
$(document).ready(function () {
// Hide the "busy" Gif at load:
$("#divProcessing").show();
$("#divData").hide();
$("#GreenSmiley").hide();
$("#RedSmiley").hide();
var usagePointId = $("#UsagePoint").val();
var url = "@Url.Action("GetDetails", "InstantReading")/" + usagePointId;
$.ajax({
url: url,
type: "GET",
dataType: "json",
success: function (resp) {
// Hide the "busy" gif:
$("#divProcessing").hide();
$("#divData").show();
if (resp.errors) {
var $summaryUl = $(".validation-summary-valid").find("ul");
$summaryUl.empty();
$.each(resp.errors,
function (a, b) {
$summaryUl.append($("").text(b.Errors[0].ErrorMessage));
});
}
else {
$("#ReadingResult").val(resp.ReadingResult);
var ResultHaveVoltageReading = resp.ResultHaveVoltageReading;
if (ResultHaveVoltageReading) {
var ResultVoltageReadingIsOk = resp.ResultVoltageReadingIsOk;
if (ResultVoltageReadingIsOk) {
$("#GreenSmiley").show();
}
else {
$("#RedSmiley").show();
}
}
}
},
error: function (xhr) {
$("#divProcessing").hide();
$("#divData").show();
$("#ReadingResult").val(xhr.val);
}
})
});
}