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:

SmtpClient und Gmail Fehler

Heute hatte ich den Fehler, das in meiner Entwicklungsversion Google Mail nicht mehr mit mehr mit dem System.Net.SmtpClient MSDNfunktionierte.

Für den SMTP-Server ist eine sichere Verbindung erforderlich, oder der Client wurde nicht authentifiziert. Die Serverantwort war: 5.5.1 Authentication Required. Learn more at

Die Lösung war so einfach, aber erstmal drauf kommen. Inder Web.config das Attribut deliveryMethod=”Network” hinzufügen, was eigentlich Standard ist, dann funktioniert es wieder.

<configuration>
  <system.net>
    <mailsettings>
      <smtp from="***@gmail.com" deliveryMethod="Network">
        <network 
          enableSsl="true" 
          host="smtp.gmail.com" 
          password="YourSecretPassword" 
          userName="YourName@gmail.com" 
          port="587"></network>
      </smtp>
    </mailsettings>
  </system.net>
 
  <!-- more settings -->
</configuration>

Related Posts:

  • No 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:

Singleton Muster

Das Singleton Muster (Singleton Pattern) ist ein Entwurfsmuster in der Sofwareentwickung, welches beschreibt, das man ein Objekt nur einmal instanziieren darf.

Was genau wird realisiert?

Der Konstruktor des Objektes wird auf private gesetzt. Dies hat zur Folge, das man keine Instanz mit dem new Operator erstellen kann. Danach wird eine statische Methode erstellt, die eine neue Instanz des Objektes zurück gibt. In dieser Methode wird überprüft, ob es schon eine Instanz gibt, anhand einer statischen Membervariable. Das wars. Eingesetzt wird dies unter anderem bei Winforms, damit man ein Fenster nicht mehrfach erzeugen kann.

class Singleton
{
        /**
         * @var Singeleton
         */
	private static $_instance;
 
        /**
         * Kontruktor MUSS logischerweise auf private gesetzt werden
         */
	private function __construct() { /* beliebiger CODE */ }
 
        /**
         * @return Singleton
         */
	public function getInstance() {
		if (self::$_instance == null || !(self::$_instance instanceof Singeleton)) {
			self::$_instance = new Singleton();
		}
		return self::$_instance;
	}
}
 
// aufruf
$mySingletonOnject = Singleton->getInstance();

Quelle: Wikipedia DE

// Nur zur Veranschaulichung – bitte nicht verwenden!
sealed class Singleton
{
    private Singleton() { /* beliebiger CODE im Kontruktor */ }
    private static Singleton _instance = null;
 
    public static Singleton getInstance()
    {
       if(_instance == null) {
          _instance = new Singleton();
       }
       return _instance;
    }
}
 
// Diese Version verwenden, wegen der ThreadSicherheit
sealed class Singleton
{
    private Singleton() { /* beliebiger CODE */ }
    private static volatile Singleton _instance = null;
 
    public static Singleton getInstance()
    {
       // DoubleLock
       if(_instance == null) {
          lock(m_lock) {
              if (_instance == null) {
                  _instance = new Singleton();
              }
          }
       }
       return _instance;
    }
 
    // Hilfsfeld für eine sichere Threadsynchronisierung
    private static object m_lock = new object();
}
 
// Zugriff über Singleton 
Singleton MySingletonObject = Singleton.getInstance();

Für weitere Informationen zu Singleton oder weiteren Design Pattern empfehle ich folgende Links

Edit: eine erweiterte Variante, basieren auf Dirk Primbs Post

sealed class Singleton
{
    // > c# 2008 - Hier wird eine statische Variable erzeugt, die mit 
    // volatile => Threadsafe
    // readonly => mit dem Schlüsselwort stellen wir sicher, das keine neue Instanz erzeugt wird
    public static readonly volatile Singleton Instance = new Singleton();
 
    public string Name {get; set; }
 
    // Konstruktor auf private
    private Singleton() { /* beliebiger CODE */ }
 
}
 
 
// Testing
var x = Singleton.Instance;
x.Name = "Hans";
 
var y = Singleton.Instance;
y.Name = "Werner";
 
// Beide Ausgaben ergeben Werner, weil es nur eine Instanz des Objektes zurückgegeben wird
Console.WriteLine("X: " + x.Name);
Console.WriteLine("Y: " + y.Name);
Console.ReadLine();

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:

Photoshop und Visual Studio Shortcuts

Vielleich ganz hilfreich, die wichtigstens ShortCuts zu Adobe Photoshop sowie zu Visual Studio 🙂

Adobe PS Shortcuts
Visual Studio 2008 Shortcuts

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:

[C#] – Bilder von einer URL laden und für DB vorbereiten

Hi

ich hoffe das hilft euch ein wenig:

Ich brauchte eine Variante, um Bilder (die Url der Bilder habe ich) von einer Website zu laden und für das speichern in eine Datenbank vorzubereiten. Da habe ich HttpWebRequest gefunden und bin zur folgenden Lösung gekommen:

// generate WebRequest
// this.ImageHTTPSrc == "http://www.example.com/image.jpg"
HttpWebRequest request = (HttpWebRequest)WebRequest.Create(this.ImageHTTPSrc);
 
// timeout
request.Timeout = 10000; // 10 secs
request.ReadWriteTimeout = 10000;
 
// get imagadata
HttpWebResponse response = (HttpWebResponse)request.GetResponse();
 
// save in Stream object
Stream resStream = response.GetResponseStream();
 
// create a image object from stream
this.ImageData = Image.FromStream(resStream);
 
// close
resStream.Close();
response.Close();
 
// convert Image2ByteArray | for database
ImageConverter imgConv = new ImageConverter();
this.ImageDataByteArray = (byte[])imgConv.ConvertTo(this.ImageData, System.Type.GetType("System.Byte[]"));
 
// save image object 2 fs
//this.ImageData.Save("c:\\tmp\\" + this.strNumber+".jpg");

Natürlich muss man hier noch die Excepitons abfangen usw. Aber als Anregung soll dies reichen 🙂

Related Posts: