Freigeben über


Neue Funktionen in ASP.NET MVC 2

In diesem Dokument werden die neuen Features und Verbesserungen beschrieben, die in ASP.NET MVC 2 eingeführt wurden.

Einführung
Aktualisieren eines ASP.NET MVC 1.0-Projekts auf ASP.NET MVC 2
Neue Funktionen
Vorlagenhilfsprogramme
Bereiche
Unterstützung für asynchrone Controller
Unterstützung für DefaultValueAttribute in Action-Method Parameters
Unterstützung für das Binden von Binärdaten mit Modellbindern
ModelMetadata- und ModelMetadataProvider-Klassen
Unterstützung für DataAnnotations-Attribute
Modellvalidierungsanbieter
Clientseitige Validierung
Neue Codeausschnitte für Visual Studio 2010
Neuer RequireHttpsAttribute-Aktionsfilter
Überschreiben des HTTP-Methodenverbs
Neue HiddenInputAttribute-Klasse für Vorlagenhilfsprogramme
Html.ValidationSummary-Hilfsmethode kann Model-Level Fehler anzeigen
T4-Vorlagen in Visual Studio generieren Code, der für die Zielversion der .NET FrameworkAPI-Verbesserungen spezifisch ist
Breaking Changes
Haftungsausschluss

Einführung

ASP.NET MVC 2 baut auf ASP.NET MVC 1.0 auf und führt eine Vielzahl von Verbesserungen und Features ein, die sich auf die Steigerung der Produktivität konzentrieren. Dieses Release ist mit ASP.NET MVC 1.0 kompatibel, sodass alle Kenntnisse, Fähigkeiten, Code und Erweiterungen für ASP.NET MVC 1.0 weiterhin gelten.

Weitere Informationen zu ASP.NET MVC finden Sie in den folgenden Ressourcen:

Aktualisieren eines ASP.NET MVC 1.0-Projekts auf ASP.NET MVC 2

ASP.NET MVC 2 kann parallel zu ASP.NET MVC 1.0 auf demselben Server installiert werden, sodass Anwendungsentwickler flexibel entscheiden können, wann eine ASP.NET MVC 1.0-Anwendung auf ASP.NET MVC 2 aktualisiert werden soll. Informationen zum Upgrade finden Sie im Dokument Upgrade einer ASP.NET MVC 1.0-Anwendung auf ASP.NET MVC 2.

Neue Funktionen

In diesem Abschnitt werden Features beschrieben, die in der MVC 2-Version eingeführt wurden.

Vorlagenhilfsprogramme

Mithilfe von Vorlagenhilfsprogrammen können Sie HTML-Elemente zur Bearbeitung und Anzeige automatisch mit Datentypen zuordnen. Wenn beispielsweise Daten des Typs System.DateTime in einer Ansicht angezeigt werden, kann ein Datumsauswahl-UI-Element automatisch gerendert werden. Dies ähnelt der Funktionsweise von Feldvorlagen in ASP.NET Dynamic Data. Weitere Informationen finden Sie unter Verwenden von Vorlagenhilfsprogrammen zum Anzeigen von Daten auf der MSDN-Website.

Bereiche

Mit Bereichen können Sie ein großes Projekt in mehrere kleinere Abschnitte organisieren, um die Komplexität einer großen Webanwendung zu verwalten. Jeder Abschnitt ("Bereich") stellt in der Regel einen separaten Abschnitt einer großen Website dar und wird verwendet, um verwandte Sätze von Controllern und Ansichten zu gruppieren. Weitere Informationen finden Sie unter Exemplarische Vorgehensweise: Organisieren einer ASP.NET MVC-Anwendung nach Bereichen auf der MSDN-Website.

Klicken Sie zum Erstellen eines neuen Bereichs in Projektmappen-Explorer mit der rechten Maustaste auf das Projekt, klicken Sie auf Hinzufügen, und klicken Sie dann auf Bereich. Daraufhin wird ein Dialogfeld angezeigt, in dem Sie zur Eingabe des Bereichsnamens aufgefordert werden. Nachdem Sie den Bereichsnamen eingegeben haben, fügt Visual Studio dem Projekt einen neuen Bereich hinzu.

Die folgende Abbildung zeigt ein Beispiellayout für ein Projekt mit zwei Bereichen, Admin und Blogs.

Screenshot: Beispiellayout für ein Projekt im Dropdownfeld Projektmappen-Explorer mit zwei Bereichen, Admin und Blogs.

Wenn Sie einen Bereich erstellen, fügt Visual Studio jedem Bereich eine Klasse hinzu, die von AreaRegistration abgeleitet wird. Diese Klasse ist erforderlich, um den Bereich und seine Routen zu registrieren, wie im folgenden Beispiel gezeigt:

namespace MyApplication.Areas.Blog {
    public class BlogAreaRegistration : AreaRegistration {
        public override string AreaName {
            get { return "blog"; }
        }

        public override void RegisterArea(AreaRegistrationContext context) {
            context.MapRoute(
                "blog_default",
                "blog/{controller}/{action}/{id}",
                new { action = "Index", id = UrlParameter.Optional }
            );

            context.MapRoute(
                "blog_whatsnew",
                "whats-new",
                new { action = "WhatsNew", id = UrlParameter.Optional  }
            );
        }
    }
}

Die Standardprojektvorlage für ASP.NET MVC 2 enthält einen Aufruf der RegisterAllAreas-Methode im Code für die Datei Global.asax. Diese Methode registriert jeden Bereich im Projekt, indem sie nach allen Typen sucht, die von der AreaRegistration-Klasse abgeleitet sind, instanziiert eine instance des Typs und ruft dann die RegisterArea-Methode auf der instance auf. Das folgende Beispiel zeigt, wie dies geschieht.

public class MyMvcApplication : HttpApplication {

    void App_Start() {
        AreaRegistration.RegisterAllAreas();
        RegisterRoutes(RouteTable.Routes);
    }

    public static void RegisterRoutes(RouteCollection routes) {
        routes.MapRoute("default", "{controller}/{action}/{id}", ...);
    }
}

Wenn Sie den Namespace nicht in der RegisterArea-Methode angeben, indem Sie den Kontext aufrufen. Die Namespaces.Add-Methode, der Namespace der Registrierungsklasse wird standardmäßig verwendet.

Unterstützung für asynchrone Controller

ASP.NET MVC 2 ermöglicht controllern jetzt die asynchrone Verarbeitung von Anforderungen. Dies kann zu Leistungssteigerungen führen, da Server, die häufig blockierende Vorgänge aufrufen (z. B. Netzwerkanforderungen), stattdessen nicht blockierende Gegenstücke aufrufen können. Weitere Informationen finden Sie im Thema Verwenden eines asynchronen Controllers in ASP.NET MVC auf MSDN.

Unterstützung für DefaultValueAttribute in Action-Method Parameters

Die System.ComponentModel.DefaultValueAttribute-Klasse ermöglicht die Angabe eines Standardwerts für den Argumentparameter für eine Aktionsmethode. Angenommen, die folgende Standardroute ist definiert:

{controller}/{action}/{id}

Außerdem wird davon ausgegangen, dass der folgende Controller und die folgende Aktionsmethode definiert sind:

public class ArticleController {
    public ActionResult View(int id, [DefaultValue(1)]int page) {
    }
}

Jede der folgenden Anforderungs-URLs ruft die View-Aktionsmethode auf, die im vorherigen Beispiel definiert ist.

  • /Article/View/123
  • /Article/View/123?page=1 (im Grunde identisch mit der vorherigen Anforderung)
  • /Article/View/123?page=2

Ohne das DefaultValueAttribute-Attribut würde die erste URL aus der vorherigen Liste nicht funktionieren, da das Page-Argument ein Werttyp ist, der nicht nullable ist, dessen Wert nicht angegeben wurde.

Wenn Ihr Code in Visual Basic 2010 oder Visual C# 2010 geschrieben ist, können Sie optionale Parameter anstelle des DefaultValueAttribute-Attributs verwenden, wie im folgenden Beispiel gezeigt:

Function View(ByVal id As Integer, Optional ByVal page As Integer = 1) _
        As ActionResult
    ' ...
End Function

public ActionResult MyAction(int id, int page = 1) {
    // ...
}

Unterstützung für das Binden von Binärdaten mit Modellbindern

Es gibt zwei neue Überladungen des Html.Hidden-Hilfsprogramms, die Binärwerte als Base-64-codierte Zeichenfolgen codieren:

public static string Hidden(this HtmlHelper htmlHelper, string name, Binary value);

public static string Hidden(this HtmlHelper htmlHelper, string name, byte[] value);

Eine typische Verwendung ist das Einbetten eines Zeitstempels für ein Objekt in der Ansicht. Ihre Anwendung kann beispielsweise das folgende Product-Objekt enthalten:

public class Product {
    //... other properties ...	
    public byte[] TimeStamp {
        get;
        set;
    }
}

Ein Bearbeitungsformular kann die TimeStamp-Eigenschaft im Formular rendern, wie im folgenden Beispiel gezeigt:

<%@ Page Inherits="ViewPage<Product>" %>
<%= Html.Hidden("TimeStamp", Model.TimeStamp) %>

Dieses Markup rendert ein ausgeblendetes Eingabeelement mit dem Zeitstempelwert als base-64-codierte Zeichenfolge, die dem folgenden Beispiel ähnelt:

<input type="hidden" name="TimeStamp" value="QVNQLk5FVCBNVkMgaXMgZnVuIQ==" />

Dieses Formular kann an eine Aktionsmethode mit einem Argument vom Typ Product gesendet werden, wie im folgenden Beispiel gezeigt:

public ActionResult Edit(Product p) {
    // p.TimeStamp is populated from the form
}

In der Aktionsmethode wird die TimeStamp-Eigenschaft ordnungsgemäß aufgefüllt, da die bereitgestellte Base64-codierte Zeichenfolge in ein Bytearray konvertiert wird.

ModelMetadata- und ModelMetadataProvider-Klassen

Die ModelMetadataProvider-Klasse stellt eine Abstraktion zum Abrufen von Metadaten für das Modell innerhalb einer Sicht bereit. MVC 2 enthält einen Standardanbieter, der die Metadaten zur Verfügung stellt, die von den Attributen im System.ComponentModel.DataAnnotations-Namespace verfügbar gemacht werden. Es ist möglich, Metadatenanbieter zu erstellen, die Metadaten aus anderen Datenspeichern bereitstellen, z. B. Datenbanken oder XML-Dateien.

Die ViewDataDictionary-Klasse macht ein ModelMetadata-Objekt verfügbar, das die Metadaten enthält, die von der ModelMetadataProvider-Klasse aus dem Modell extrahiert werden. Dadurch können die Vorlagenhilfsprogramme diese Metadaten nutzen und ihre Ausgabe entsprechend anpassen.

Weitere Informationen finden Sie in der Dokumentation zu den Klassen ModelMetadata und ModelMetadataProvider .

Unterstützung für DataAnnotations-Attribute

ASP.NET MVC 2 unterstützt die Verwendung der Validierungsattribute RangeAttribute, RequiredAttribute, StringLengthAttribute und RegexAttribute (definiert im System.ComponentModel.DataAnnotations-Namespace), wenn Sie an ein Modell binden, um eine Eingabeüberprüfung bereitzustellen.

Weitere Informationen finden Sie auf der MSDN-Website unter Vorgehensweise: Überprüfen von Modelldaten mithilfe von DataAnnotations-Attributen . Ein Beispielprojekt, das die Verwendung dieser Attribute veranschaulicht, steht unter https://go.microsoft.com/fwlink/?LinkId=157753zum Download zur Verfügung.

Model-Validator Anbieter

Die Modellvalidierungsanbieterklasse stellt eine Abstraktion dar, die Validierungslogik für das Modell bereitstellt. ASP.NET MVC enthält einen Standardanbieter, der auf Validierungsattributen basiert, die im System.ComponentModel.DataAnnotations-Namespace enthalten sind. Sie können auch eigene Validierungsanbieter erstellen, die benutzerdefinierte Validierungsregeln und benutzerdefinierte Zuordnungen von Validierungsregeln zum Modell definieren. Weitere Informationen finden Sie in der Dokumentation zur ModelValidatorProvider-Klasse .

Client-Side Validierung

Die Modellvalidierungsanbieterklasse macht dem Browser Validierungsmetadaten in Form von JSON-serialisierten Daten verfügbar, die von einer clientseitigen Validierungsbibliothek verwendet werden können. ASP.NET MVC 2 enthält eine Clientvalidierungsbibliothek und einen Adapter, der die zuvor erwähnten Validierungsattribute des DataAnnotations-Namespaces unterstützt. Mit der Anbieterklasse können Sie auch andere Clientvalidierungsbibliotheken verwenden, indem Sie einen Adapter schreiben, der die JSON-Daten verarbeitet und aufruft, in die alternative Bibliothek.

Neue Codeausschnitte für Visual Studio 2010

Eine Reihe von HTML-Codeausschnitten für ASP.NET MVC 2 wird mit Visual Studio 2010 installiert. Um eine Liste dieser Codeausschnitte anzuzeigen, wählen Sie im Menü Extras die Option Codeausschnitt-Manager aus. Wählen Sie für die Sprache HTML aus, und wählen Sie als Speicherort ASP.NET MVC 2 aus. Weitere Informationen zur Verwendung von Codeausschnitten finden Sie in der Visual Studio-Dokumentation.

Neuer RequireHttpsAttribute-Aktionsfilter

ASP.NET MVC 2 enthält eine neue RequireHttpsAttribute-Klasse, die auf Aktionsmethoden und Controller angewendet werden kann. Standardmäßig leitet der Filter eine NICHT-SSL-Anforderung (HTTP) an das HTTPS-Äquivalent (SSL-enabled) um.

Überschreiben des HTTP-Methodenverbs

Wenn Sie eine Website mithilfe des REST-Architekturstils erstellen, werden HTTP-Verben verwendet, um zu bestimmen, welche Aktion für eine Ressource ausgeführt werden soll. REST erfordert, dass Anwendungen den gesamten Bereich gängiger HTTP-Verben unterstützen, einschließlich GET, PUT, POST und DELETE.

ASP.NET MVC 2 enthält neue Attribute, die Sie auf Aktionsmethoden anwenden können und die eine kompakte Syntax bieten. Mit diesen Attributen kann ASP.NET MVC eine Aktionsmethode basierend auf dem HTTP-Verb auswählen. Im folgenden Beispiel ruft eine POST-Anforderung die erste Aktionsmethode auf, und eine PUT-Anforderung ruft die zweite Aktionsmethode auf.

[HttpPost]
public ActionResult Edit(int id)

[HttpPut]
public ActionResult Edit(int id, Tag tag)

In früheren Versionen von ASP.NET MVC erforderten diese Aktionsmethoden eine ausführlichere Syntax, wie im folgenden Beispiel gezeigt:

[AcceptVerbs(HttpVerbs.Post)] 
public ActionResult Edit(int id) 

[AcceptVerbs(HttpVerbs.Put)] 
public ActionResult Edit(int id, Tag tag)

Da Browser nur die HTTP-Verben GET und POST unterstützen, ist es nicht möglich, an eine Aktion zu senden, die ein anderes Verb erfordert. Daher ist es nicht möglich, alle RESTful-Anforderungen nativ zu unterstützen.

Zur Unterstützung von RESTful-Anforderungen während POST-Vorgängen führt ASP.NET MVC 2 jedoch eine neue HttpMethodOverride-HTML-Hilfsmethode ein. Diese Methode rendert ein ausgeblendetes Eingabeelement, das dazu führt, dass das Formular jede HTTP-Methode effektiv emuliert. Wenn Sie beispielsweise die HTTPMethodOverride-HTML-Hilfsmethode verwenden, können Sie eine Formularübermittlung als PUT- oder DELETE-Anforderung anzeigen lassen. Das Verhalten von HttpMethodOverride wirkt sich auf die folgenden Attribute aus:

  • HttpPostAttribute
  • HttpPutAttribute
  • HttpGetAttribute
  • HttpDeleteAttribute
  • AcceptVerbsAttribute

Das ausgeblendete Eingabeelement hat den Namen X-HTTP-Method-Override und seinen Wert auf das zu emulierende HTTP-Verb festgelegt. Der Überschreibungswert kann auch in einem HTTP-Header oder in einem Abfragezeichenfolgenwert als Name/Wert-Paar angegeben werden.

Die Außerkraftsetzung kann nur verwendet werden, wenn es sich bei der tatsächlichen Anforderung um eine POST-Anforderung handelt. Der Überschreibungswert wird bei Anforderungen ignoriert, die ein anderes HTTP-Verb verwenden.

Neue HiddenInputAttribute-Klasse für vorlagenbasierte Hilfsprogramme

Sie können das neue HiddenInputAttribute-Attribut auf eine Modelleigenschaft anwenden, um anzugeben, ob ein ausgeblendetes Eingabeelement gerendert werden soll, wenn das Modell in einer Editorvorlage angezeigt wird. (Das Attribut legt einen impliziten UIHint-Wert von HiddenInput fest.) Mit der DisplayValue-Eigenschaft des Attributs können Sie angeben, ob der Wert im Editor und im Anzeigemodus angezeigt wird. Wenn DisplayValue auf false festgelegt ist, wird nichts angezeigt, nicht einmal das HTML-Markup, das normalerweise ein Feld umgibt. Der Standardwert für DisplayValue ist true.

Sie können das HiddenInputAttribute-Attribut in den folgenden Szenarien verwenden:

  • Wenn eine Ansicht Benutzern ermöglicht, die ID eines Objekts zu bearbeiten, und es ist erforderlich, den Wert anzuzeigen sowie ein ausgeblendetes Eingabeelement bereitzustellen, das die alte ID enthält, damit es an den Controller zurückgegeben werden kann.
  • Wenn eine Ansicht Benutzern ermöglicht, eine binäre Eigenschaft zu bearbeiten, die nie angezeigt werden sollte, z. B. eine Zeitstempeleigenschaft. In diesem Fall werden der Wert und das umgebende HTML-Markup (z. B. die Bezeichnung und der Wert) nicht angezeigt.

Das folgende Beispiel zeigt, wie die HiddenInputAttribute-Klasse verwendet wird.

public class ProductViewModel {
    [HiddenInput] // equivalent to [HiddenInput(DisplayValue=true)]
    public int Id { get; set; }

    public string Name { get; set; }

    [HiddenInput(DisplayValue=false)]
    public byte[] TimeStamp { get; set; }
}

Wenn das Attribut auf true festgelegt ist (oder kein Parameter angegeben ist), tritt Folgendes auf:

  • In Anzeigevorlagen wird eine Bezeichnung gerendert, und der Wert wird dem Benutzer angezeigt.
  • In Editorvorlagen wird eine Bezeichnung gerendert, und der Wert wird in einem ausgeblendeten Eingabeelement gerendert.

Wenn das Attribut auf false festgelegt ist, geschieht Folgendes:

  • In Anzeigevorlagen wird für dieses Feld nichts gerendert.
  • In Editorvorlagen wird keine Bezeichnung gerendert, und der Wert wird in einem ausgeblendeten Eingabeelement gerendert.

Html.ValidationSummary Helper Method kann Model-Level Fehler anzeigen

Anstatt immer alle Validierungsfehler anzuzeigen, verfügt die Html.ValidationSummary-Hilfsmethode über eine neue Option, um nur Fehler auf Modellebene anzuzeigen. Dadurch können Fehler auf Modellebene in der Validierungszusammenfassung und feldspezifische Fehler neben jedem Feld angezeigt werden.

T4-Vorlagen in Visual Studio generieren Code, der für die Zielversion des .NET Framework

Eine neue Eigenschaft ist für T4-Dateien vom ASP.NET MVC T4-Host verfügbar, der die Version des von der Anwendung verwendeten .NET Framework angibt. Dadurch können T4-Vorlagen Code und Markup generieren, die für eine Version des .NET Framework spezifisch sind. In Visual Studio 2008 ist der Wert immer .NET 3.5. In Visual Studio 2010 ist der Wert entweder .NET 3.5 oder .NET 4.

API-Verbesserungen

In diesem Abschnitt werden Änderungen an vorhandenen ASP.NET MVC-Typen und -Membern beschrieben.

  • Der Controller-Klasse wurde eine geschützte virtuelle CreateActionInvoker-Methode hinzugefügt. Diese Methode wird von der ActionInvoker-Eigenschaft von Controller aufgerufen und ermöglicht eine verzögerte Instanziierung des Aufrufers, wenn bereits kein Aufrufer festgelegt ist.
  • Der AuthorizeAttribute-Klasse wurde eine geschützte virtuelle HandleUnauthorizedRequest-Methode hinzugefügt. Dadurch können Filter, die von AuthorizeAttribute abgeleitet werden, das Verhalten steuern, wenn die Autorisierung fehlschlägt.
  • Eine Add(string key, object value)-Methode wurde der ValueProviderDictionary-Klasse hinzugefügt. Dadurch können Sie die Wörterbuchinitialisierersyntax für ValueProviderDictionary verwenden, wie im folgenden Beispiel dargestellt:
Controller c = new MyController();
c.ValueProvider = new ValueProviderDictionary(null) {
    { "example1", "example1Value" },
    { "example2", "example2Value" },
    { "example3", new int[] { 1, 2, 3 } }
};
  • Eine get_object-Methode in der Sys.Mvc.AjaxContext-Klasse hinzugefügt. Dies ist eine JavaScript-Methode, die der get_data-Methode ähnelt, aber wenn der Inhaltstyp der Antwort application/json ist, gibt get_object das JSON-Objekt zurück.
  • Eine ActionDescriptor-Eigenschaft wurde der AuthorizationContext-Klasse hinzugefügt.
  • Ein UrlParameter.Optional-Token wurde hinzugefügt, das verwendet werden kann, um Probleme bei der Bindung an ein Modell zu umgehen, das eine ID-Eigenschaft enthält, wenn die Eigenschaft in einem Formularbeitrag fehlt. Weitere Informationen finden Sie im Eintrag ASP.NET MVC 2 Optional URL Parameters im Blog von Phil Haack.

Aktuelle Änderungen

Die folgenden Änderungen können Fehler in vorhandenen ASP.NET MVC 1.0-Anwendungen verursachen.

Änderung des Eigenschaftenüberprüfungsverhaltens für Klassen, die IDataErrorInfo implementieren

Bei Modellobjekten, die IDataErrorInfo zum Durchführen der Überprüfung verwenden, wird jede Eigenschaft überprüft, unabhängig davon, ob ein neuer Wert festgelegt wurde. In ASP.NET MVC 1.0 wurden nur Eigenschaften überprüft, für die neue Werte festgelegt wurden. In ASP.NET MVC 2 wird die Error-Eigenschaft von IDataErrorInfo nur aufgerufen, wenn alle Eigenschaftsüberprüfungen erfolgreich waren.

Iis-Skriptzuordnungsskript ist im Installationsprogramm nicht mehr verfügbar

Das IIS-Skript zur Skriptzuordnung ist ein Befehlszeilenskript, das zum Konfigurieren von Skriptzuordnungen für IIS 6 und für IIS 7 im klassischen Modus verwendet wird. Das Skript zur Skriptzuordnung ist nicht erforderlich, wenn Sie den Visual Studio Development Server verwenden oder IIS 7 im integrierten Modus verwenden. Die Skripts sind als separater, nicht unterstützter Download auf dem ASP.NET WebStack verfügbar.

Die Html.Substitute-Hilfsmethode in MVC Futures ist nicht mehr verfügbar.

Aufgrund von Änderungen am Renderingverhalten von MVC-Ansichts-Engines funktioniert die Html.Substitute-Hilfsmethode nicht und wurde entfernt.

Die IValueProvider-Schnittstelle ersetzt alle Verwendungen von IDictionary.

Jedes Eigenschafts- oder Methodenargument, das IDictionary in MVC 1.0 akzeptiert hat, akzeptiert jetzt IValueProvider. Diese Änderung betrifft nur Anwendungen, die benutzerdefinierte Wertanbieter oder benutzerdefinierte Modellbinder enthalten. Beispiele für Eigenschaften und Methoden, die von dieser Änderung betroffen sind, sind:

  • Die ValueProvider-Eigenschaft der Klassen ControllerBase und ModelBindingContext.
  • Die TryUpdateModel-Methoden der Controller-Klasse.

Neue CSS-Klassen wurden in der Datei Site.css hinzugefügt.

Die Datei Site.css in der ASP.NET MVC-Projektvorlagen wurde aktualisiert und enthält neue Stile, die von der Validierungsfunktion und den vorlagenbasierten Hilfsprogrammen verwendet werden.

Hilfsprogramme geben jetzt ein MvcHtmlString-Objekt zurück.

Um die neue Html-Codierungsausdruckssyntax in ASP.NET 4 zu nutzen, lautet der Rückgabetyp für HTML-Hilfsprogramme jetzt MvcHtmlString anstelle einer Zeichenfolge. Wenn Sie ASP.NET MVC 2 und die neuen Hilfsprogramme auf ASP.NET 3.5 verwenden, können Sie die HTML-Codierungssyntax nicht nutzen. die neue Syntax ist nur verfügbar, wenn Sie ASP.NET MVC 2 auf ASP.NET 4 ausführen.

JsonResult antwortet jetzt nur auf HTTP POST-Anforderungen

Um JSON-Hijacking-Angriffe zu minimieren, die das Potenzial zur Offenlegung von Informationen haben, antwortet die JsonResult-Klasse jetzt standardmäßig nur auf HTTP POST-Anforderungen. Ajax GET-Aufrufe von Aktionsmethoden, die ein JsonResult-Objekt zurückgeben, sollten geändert werden, um stattdessen POST zu verwenden. Bei Bedarf können Sie dieses Verhalten überschreiben, indem Sie die neue JsonRequestBehavior-Eigenschaft von JsonResult festlegen. Weitere Informationen zum potenziellen Exploit finden Sie im Blogbeitrag JSON Hijacking im Blog von Phil Haack.

Model- und ModelType-Eigenschaftssetter für ModelBindingContext sind veraltet.

Der ModelBindingContext-Klasse wurde eine neue settable ModelMetadata-Eigenschaft hinzugefügt. Die neue Eigenschaft kapselt sowohl die Model- als auch die ModelType-Eigenschaft. Obwohl die Model- und ModelType-Eigenschaften veraltet sind, funktionieren die Eigenschaften getter aus Gründen der Abwärtskompatibilität weiterhin. sie delegieren an die ModelMetadata-Eigenschaft, um den Wert abzurufen.

Änderungen an der DefaultControllerFactory-Klasse unterbrechen benutzerdefinierte Controllerfactorys, die von ihr abgeleitet werden

Die DefaultControllerFactory-Klasse wurde durch Entfernen der RequestContext-Eigenschaft behoben. Anstelle dieser Eigenschaft wird der Anforderungskontext instance an die geschützten virtuellen Methoden GetControllerInstance und GetControllerType übergeben. Diese Änderung wirkt sich auf benutzerdefinierte Controllerfactorys aus, die von DefaultControllerFactory abgeleitet werden.

Benutzerdefinierte Controllerfactorys werden häufig verwendet, um Abhängigkeitsinjektion für ASP.NET MVC-Anwendungen bereitzustellen. Um die benutzerdefinierten Controllerfactorys zu aktualisieren, um ASP.NET MVC 2 zu unterstützen, ändern Sie die Methodensignatur bzw. -signaturen so, dass sie den neuen Signaturen entsprechen, und verwenden Sie den Anforderungskontextparameter anstelle der -Eigenschaft.

"Area" ist jetzt ein reservierter Routenwertschlüssel.

Die Zeichenfolge "area" in Route-Werten hat jetzt eine besondere Bedeutung in ASP.NET MVC, auf die gleiche Weise wie "Controller" und "Aktion". Wenn HTML-Hilfsprogramme mit einem Routenwertwörterbuch bereitgestellt werden, das "area" enthält, fügen die Hilfsprogramme "area" nicht mehr in die Abfragezeichenfolge an.

Wenn Sie das Feature "Bereiche" verwenden, stellen Sie sicher, dass Sie {area} nicht als Teil Ihrer Routen-URL verwenden.

Haftungsausschluss

Dies ist ein vorläufiges Dokument, das vor der kommerziellen Veröffentlichung der beschriebenen Software ggf. erheblich geändert wird.

Die in diesem Dokument enthaltenen Informationen stellen die Sicht der Microsoft Corporation der hier diskutierten Themen zum Zeitpunkt der Veröffentlichung dar. Da Microsoft auf wechselnde Marktbedingungen reagieren muss, sollten sie nicht als Verpflichtung seitens Microsoft interpretiert werden, und Microsoft kann die Genauigkeit der dargelegten Informationen nach dem Zeitpunkt der Veröffentlichung nicht garantieren.

Dieses Whitepaper dient ausschließlich Informationszwecken. MICROSOFT ÜBERNIMMT KEINE AUSDRÜCKLICHE, STILLSCHWEIGENDE ODER AUS GESETZ ERWACHSENDE GARANTIE IN BEZUG AUF DIE INFORMATIONEN IN DIESEM DOKUMENT.

Die Benutzer/innen sind verpflichtet, sich an alle anwendbaren Urheberrechtsgesetze zu halten. Unabhängig von der Anwendbarkeit der entsprechenden Urheberrechtsgesetze darf kein Teil dieses Dokuments ohne ausdrückliche schriftliche Erlaubnis der Microsoft Corporation für irgendwelche Zwecke vervielfältigt oder in einem Datenempfangssystem gespeichert oder darin eingelesen werden, unabhängig davon, auf welche Art und Weise oder mit welchen Mitteln (elektronisch, mechanisch, durch Fotokopieren, Aufzeichnen usw.) dies geschieht.

Es ist möglich, dass Microsoft Rechte an Patenten bzw. an angemeldeten Patenten, an Marken, Urheberrechten oder sonstigem geistigen Eigentum besitzt, die sich auf den fachlichen Inhalt dieses Dokuments beziehen. Die Bereitstellung dieses Dokuments gewährt Ihnen jedoch keinerlei Lizenzrechte an diesen Patenten, Marken, Urheberrechten oder anderem geistigen Eigentum, es sei denn, dies wurde ausdrücklich durch einen schriftlichen Lizenzvertrag mit der Microsoft Corporation vereinbart.

Sofern nicht anders angegeben, sind die hier dargestellten Beispielunternehmen, Organisationen, Produkte, Domänennamen, E-Mail-Adressen, Logos, Personen, Orte und Ereignisse fiktiv, und es ist keine Verbindung mit einem echten Unternehmen, organization, Produkt, Domänennamen, E-Mail-Adresse, Logo, Person, Ort oder Ereignis beabsichtigt oder sollte abgeleitet werden.

© 2010 Microsoft Corporation. Alle Rechte vorbehalten.

Microsoft und Windows sind eingetragene Marken oder Marken der Microsoft Corporation in den USA und/oder anderen Ländern.

Die in diesem Dokument erwähnten Namen von Unternehmen und Produkten können Marken der jeweiligen Eigentümer sein.