ajax Origin null is not allowed by Access-Control-Allow-Origin

Für mobile JS-Applikationen ist es meist erforderlich, die Anfragen direkt per Ajax an einen externen Ziel-Server zu schicken.

In der bisherigen Entwicklung erhielt man in Chrome folgende Meldung

XMLHttpRequest cannot load . Origin null is not allowed by Access-Control-Allow-Origin.

Im Firefox Firebug bekam ich keine Nachricht.

Nachdem ich auf die Dokumentation von Mozilla kam, probierte ich ein wenig mit Response Object herum und folgende, funktionierende Lösung kam heraus

// Headerinformationen, um Ajaxanfragen direkt zu ermöglichen
context.Response.AddHeader("Access-Control-Allow-Origin", "*");
context.Response.AddHeader("Access-Control-Allow-Methods", "POST, GET, OPTIONS");
context.Response.AddHeader("Access-Control-Allow-Headers", "*");

Dies sollte dann wirklich nur an öffentlichen Webservices gemacht werden!

In PHP sieht das ganz dann so aus:

header('Access-Control-Allow-Origin: *');
header('Access-Control-Allow-Methods", "POST, GET, OPTIONS');
header('Access-Control-Allow-Headers *');

Related Posts:

Composite C1 CMS mvcplayer verarbeitet kein json

Im CMS Composite C1 gibt es den mvcplayer. Dieser ermöglicht es, MVC-basierte Module zu entwickeln. Klingt nicht schlecht, funktioniert leider nicht 100%. Ich wollte per ajax eine Methode aufrufen, um einfach JSon Daten zu bekommen, da verweigerte der “mvcplayer” seinen Dienst. Ich bekam eine leere Seite, das die Verbindung unterbrochen wurde…

Dies habe ich versucht:

 
#region ajax methods
 
// This doesn't work!
public JsonResult GetRoutesListByLocationId(int id)
{
    List<route> myRoutes = this._service.GetRoutesListByStartLocationId(id);
    return Json(myRoutes, JsonRequestBehavior.AllowGet);
}
 
#endregion
 
</route>

Laut Dokumentation soll die Variante funktionieren, einen string zurück zu geben. Dann habe ich als Workaround diese Lösung entwickelt:

 
public string GetRoutesListByLocationId(int id)
{
    List<route> myRoutes = this._service.GetRoutesListByStartLocationId(id);
    return new JavaScriptSerializer().Serialize(myRoutes);
}
 
</route>

Ich habe schon eine E-Mail an die Entwickler geschrieben und hoffe, das es bald gefixt sein wird.

Da es nichts weiter in den gängigsten Suchmaschinen dazu gibt, habe ich diese Lösung einfach mal notiert. Für ein Feedback oder anderen Lösungsvorschlag würde ich mich freuen.

Links

Related Posts:

Request.QueryString – Parameter entfernen

Neulich stand ich vor einem Problem. Ich musste die Request.QueryString Collection auswerten und brauche einen bestimmten Schlüssel nicht. Request.QueryString ist aber ReadOnly und kann nur mit einem neuen Response weiter verarbeitet werden.

// 
NameValueCollection coll = Request.QueryString;
 
// remove
if (!String.IsNullOrEmpty(coll["gridAction"]) && coll["gridAction"] == "batchAction")
{
    // SCHLÄGT FEHL!!!! => Exception, weil ReadOnly
    coll.Remove("gridAction");
}

Statt in einer Schleife die Collection auszulesen, bin ich auf die statische Methode ParseQueryString aus dem Objekt HttpUtility gestoßen:

 
public static NameValueCollection ParseQueryString(
	string query
)
 
public static NameValueCollection ParseQueryString(
	string query,
	Encoding encoding
)

liefert auch eine Collection zurück, die aber nicht ReadOnly ist.

Beispiel:

// 
NameValueCollection coll = HttpUtility.ParseQueryString(Request.QueryString.ToString());
 
// remove
if (!String.IsNullOrEmpty(coll["gridAction"]) && coll["gridAction"] == "batchAction")
{
    coll.Remove("gridAction");
}

Habt Ihr noch andere Anregungen, Ideen, Lösungsvorschläge?

In diesem Sinne

Related Posts:

ASP.NET MVC2 – Preview 1 Released

Eine Vorabversion von ASP.NET MVC 2 wurde veröffentlicht. die Features sprechen für sich.

Preview 1

  • Areas Support
  • Support for Data Annotations
  • Templated Helpers

Preview 2

  • Client Validation
  • Strongly-typed input helpers
  • Strongly-typed link helpers
  • Asynchronous Controller Actions
  • Areas (more)
  • Other Improvements

Mehr Details in der ASP.NET MVC 2 – Roadmap und bei Scott Guthrie.

Gruß Christian

Related Posts:

Controls innerhalb von LoginView ansprechen

Hallo,

manchmal sieht man den Wald vor lauter Bäumen nicht ;). Nun suchte ich eine Methode, um auf die Controls innerhalb eines asp:LoginView Controls zuzugreifen.

Fündig geworden bin ich hier, und ich nutze die FindControl Methode so oft …, manchmal ärgerlich.

Ich zeige es einmal anhand des Beispiels von Thomas.

asp.net

<asp:loginview id="LVBla" runat="server">
     <anonymoustemplate>
         <asp:label ID="AnonymousLabel" runat="server"></asp:label>
     </anonymoustemplate>
</asp:loginview>

c#

 
protected void Page_Load(object sender, EventArgs e)
{
    Label anonymousLabel = (Label)LVBla.FindControl("AnonymousLabel");
 
    if (anonymousLabel != null) {
        anonymousLabel.Text = DateTime.Now.ToString();
    }
}

Und das ganze nochmal in VB.NET

vb.net

Dim anonymousLabel As Label = CType(Me.LoginView1.FindControl("AnonymousLabel"), Label)
 
If Not (anonymousLabel Is Nothing) Then
    anonymousLabel.Text = DateTime.Now.ToString()
End If

Related Posts:

[ASP.NET] – Zeilenumbruch im Gridview – Eval / Bind

Wieder was gelernt 😉

EIch habe im Gridview einen Zeilenumbruch erzeugt mit

[vbnet]
<%#Replace(Eval("keywords"), vbNewLine, "
“)%>
[/vbnet]

Wenn aber das Feld leer ist, kommt eine DBNull Exception. Richt ist es so:

[vbnet]
<%#Eval("keywords").ToString().Replace(vnNewLine, "
“)%>
[/vbnet]

Hoffe das hilft 😉

Related Posts:

[ASP.NET] – SecurityTrimmingEnabled=”true”

Ich falle immer wieder darauf rein…

in Visual Studio gibt es einen Bug mit dem Autointellisense und dem Wort SecurityTrimmingEnabled=”true”.

Automatisch wird die eigenschaft so eingefügt:

<sitemapnode url="~/member.apsx" title="Mitglieder" description="Mitglieder" roles="admin" securitytrimmingenabled="true"></sitemapnode>

aber es ist falsch geschrieben (Case Sensitive), so ist es richtig:

<sitemapnode url="~/member.apsx" title="Mitglieder" description="Mitglieder" roles="admin" Securitytrimmingenabled="true"></sitemapnode>

MSDN – SecurityTrimmingEnabled

// Namespace: System.Web
// Assembly: System.Web (in system.web.dll)
public bool SecurityTrimmingEnabled { get; }

Related Posts:

ASP.NET – DateTime in einer *.aspx Datei formatieren

Wenn man mit Bind ein Control an das SQL-Datasource gebunden hat, kann man diese auch mit dem Bind formatieren. Hier anhand eines Feldes von DateTime:

Normale Bindung

<asp:label ID="lblDatum2" runat="server" Text='<%# Bind("datum") %>'></asp:label>

Ausgabe:

25.09.2006 01:03:54

Und Formatiert man es, wenn man z.B. keine Uhrzeit haben möchte:

<asp:label ID="lblDatum2" runat="server" Text='<%# Bind("datum", "{0:dd MM yyyy}") %>'></asp:label>

Ausgabe:

25.09.2006

Related Posts: