c# tutorial - Wie Hinzufügen von Web-API zu einem vorhandenen ASP.NET MVC(5)Web Application-Projekt?




deutsch core (2)

Aktualisieren Sie das MVC-Projekt

Verwenden Sie Nuget , um die neueste Web-API zu erhalten.

Projekt - Rechtsklick - Nuget-Pakete verwalten - Nach Web-API (Microsoft ASP.NET-Web-API ...) suchen und in Ihrem MVC-Projekt installieren.

Dann müssen Sie noch Web-API-Routing zum funktionieren bringen. Von Microsoft Konfigurieren von ASP.NET Web API 2

Fügen Sie WebApiConfig.cs dem App_Start / -Ordner hinzu

using System.Web.Http;

namespace WebApplication1
{
    public static class WebApiConfig
    {
        public static void Register(HttpConfiguration config)
        {
            // TODO: Add any additional configuration code.

            // Web API routes
            config.MapHttpAttributeRoutes();

            config.Routes.MapHttpRoute(
                name: "DefaultApi",
                routeTemplate: "api/{controller}/{id}",
                defaults: new { id = RouteParameter.Optional }
            );

        // WebAPI when dealing with JSON & JavaScript!
        // Setup json serialization to serialize classes to camel (std. Json format)
        var formatter = GlobalConfiguration.Configuration.Formatters.JsonFormatter;
        formatter.SerializerSettings.ContractResolver =
            new Newtonsoft.Json.Serialization.CamelCasePropertyNamesContractResolver();
        }
    }
}

Wenn Sie ein MVC-Projekt haben, wird es Global.asax.cs haben , fügen Sie die neuen Routen hinzu. Reihenfolge der Global.asax.cs-Routen ist kritisch. Beachten Sie, dass es veraltete Beispiele gibt, die WebApiConfig.Register

Fügen Sie diese Zeile zu Global.asax.cs hinzu: GlobalConfiguration.Configure(WebApiConfig.Register);

protected void Application_Start()
{
    // Default stuff
    AreaRegistration.RegisterAllAreas();

    // Manually installed WebAPI 2.2 after making an MVC project.
    GlobalConfiguration.Configure(WebApiConfig.Register); // NEW way
    //WebApiConfig.Register(GlobalConfiguration.Configuration); // DEPRECATED

    // Default stuff
    FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);
    RouteConfig.RegisterRoutes(RouteTable.Routes);
    BundleConfig.RegisterBundles(BundleTable.Bundles);
}

WebAPI-Hilfe

Installieren Sie WebAPI.HelpPage, um die ( sehr ) hilfreichen WebAPI-Hilfeseiten zu erhalten. Siehe http://channel9.msdn.com/Events/Build/2014/3-644 (~ 42 Minuten in) für das, was es tut. Es sieht sehr hilfreich aus!

Nuget-Konsole: Install-Package Microsoft.AspNet.WebApi.HelpPage

Um zu überprüfen, ob WebAPI funktioniert:

Zum Controller-Ordner -> Neues Objekt hinzufügen -> Web-API-Controller-Klasse.

public class TestController : ApiController
{
    //public TestController() { }

    // GET api/<controller>
    public IEnumerable<string> Get()
    {
        return new string[] { "value1", "value2" };
    }

    // GET api/<controller>/5
    public string Get(int id)
    {
        return "value";
    }
    //...
}

Jetzt können Sie wie gewohnt in IE / FF / Chrome oder in den JavaScript-Konsolen für Nicht-Get-Tests testen.

(Wenn nur der Controller in der URL die Aktion GET () im neuen Web-API-Controller aufruft, wird er je nach REST automatisch den Methoden / Aktionen zugeordnet, zB PUT / POST / GET / DELETE, Sie müssen ihn nicht aufrufen sie durch Aktion wie in MVC) Die URL direkt:

http://localhost:PORT/api/CONTROLLERNAME/

Verwenden Sie alternativ jQuery, um den Controller abzufragen. Führen Sie das Projekt aus, öffnen Sie die Konsole (F12 in IE) und versuchen Sie, eine Ajax-Abfrage auszuführen. (Überprüfen Sie Ihren PORT & CONTROLLERNAME)

$.get( "http://localhost:PORT/api/CONTROLLERNAME/", function( data ) {
    //$( ".result" ).html( data );
    alert( "Get data received:" + data);
});

Randnotiz: Bei der Kombination von MVC und Web-API in einem Projekt sind einige Vor- und Nachteile zu beachten

Überprüfung der WebAPI-Hilfe: http://localhost:PORT/help

Angenommen, Sie haben beim Erstellen eines neuen MVC (5) -Projekts vergessen, das Kontrollkästchen "Web-API" anzukreuzen (fügen Sie es dem Projekt hinzu). Was müssen Sie tun, um die Web-API hinzuzufügen und in Betrieb zu nehmen?

Es gibt eine Reihe von Migrationsfragen, aber keine scheint die vollständigen und aktuellen Schritte zum Hinzufügen der Web-API zu einem MVC 5-Projekt zu enthalten und scheint sich von einigen der alten Antworten geändert zu haben.

Fügen Sie Web-API zu MVC 4 hinzu

Hinzufügen von GlobalConfiguration.Configure (WebApiConfig.Register) MVC 4


Aktualisieren:

Ich habe eine andere Antwort gegeben, wie man JWT-Authentifizierung für Web-API hier für jeden benutzt, der an JWT interessiert ist:

JWT-Authentifizierung für Asp.Net Web Api

Wir haben es geschafft, die HMAC-Authentifizierung auf die sichere Web-API anzuwenden, und es hat funktioniert. Die HMAC-Authentifizierung verwendet einen geheimen Schlüssel für jeden Verbraucher, der sowohl dem Verbraucher als auch dem Server weiß, dass er eine Nachricht hmac-hashen soll, wobei HMAC256 verwendet werden sollte. In den meisten Fällen wird das Hash-Passwort des Konsumenten als geheimer Schlüssel verwendet.

Die Nachricht wird normalerweise aus Daten in der HTTP-Anforderung oder sogar benutzerdefinierten Daten erstellt, die zum HTTP-Header hinzugefügt werden. Die Nachricht könnte Folgendes enthalten:

  1. Timestamp: Zeit, zu der die Anfrage gesendet wird (UTC oder GMT)
  2. HTTP-Verb: GET, POST, PUT, DELETE.
  3. Postdaten und Abfragezeichenfolge,
  4. URL

Unter der Haube würde HMAC-Authentifizierung sein:

Consumer sendet eine HTTP-Anfrage an den Webserver, nach dem Erstellen der Signatur (Ausgabe von hmac-Hash), der Vorlage der HTTP-Anfrage:

User-Agent: {agent}   
Host: {host}   
Timestamp: {timestamp}
Authentication: {username}:{signature}

Beispiel für eine GET-Anfrage:

GET /webapi.hmac/api/values

User-Agent: Fiddler    
Host: localhost    
Timestamp: Thursday, August 02, 2012 3:30:32 PM 
Authentication: cuongle:LohrhqqoDy6PhLrHAXi7dUVACyJZilQtlDzNbLqzXlw=

Die Nachricht zum Hash, um die Signatur zu erhalten:

GET\n
Thursday, August 02, 2012 3:30:32 PM\n
/webapi.hmac/api/values\n

Beispiel für eine POST-Anfrage mit Abfragezeichenfolge (Signatur unten ist nicht korrekt, nur ein Beispiel)

POST /webapi.hmac/api/values?key2=value2

User-Agent: Fiddler    
Host: localhost    
Content-Type: application/x-www-form-urlencoded
Timestamp: Thursday, August 02, 2012 3:30:32 PM 
Authentication: cuongle:LohrhqqoDy6PhLrHAXi7dUVACyJZilQtlDzNbLqzXlw=

key1=value1&key3=value3

Die Nachricht zum Hash, um die Signatur zu erhalten

GET\n
Thursday, August 02, 2012 3:30:32 PM\n
/webapi.hmac/api/values\n
key1=value1&key2=value2&key3=value3

Beachten Sie, dass die Formulardaten und die Abfragezeichenfolge in der richtigen Reihenfolge sein sollten, damit der Code auf dem Server Abfragezeichenfolge und Formulardaten zum Erstellen der richtigen Nachricht erhält.

Wenn eine HTTP-Anfrage an den Server kommt, wird ein Authentifizierungs-Aktionsfilter implementiert, um die Anfrage zu analysieren, um Informationen zu erhalten: HTTP-Verb, Zeitstempel, URI, Formulardaten und Abfragezeichenfolge, basierend darauf, um Signatur mit dem Geheimnis zu erstellen Schlüssel (Hash-Passwort) auf dem Server.

Der geheime Schlüssel wird von der Datenbank mit dem Benutzernamen auf der Anfrage erhalten.

Dann vergleicht der Server-Code die Signatur der Anfrage mit der erstellten Signatur; Wenn sie gleich ist, wird die Authentifizierung übergeben, andernfalls ist sie fehlgeschlagen.

Der Code zum Erstellen der Signatur:

private static string ComputeHash(string hashedPassword, string message)
{
    var key = Encoding.UTF8.GetBytes(hashedPassword.ToUpper());
    string hashString;

    using (var hmac = new HMACSHA256(key))
    {
        var hash = hmac.ComputeHash(Encoding.UTF8.GetBytes(message));
        hashString = Convert.ToBase64String(hash);
    }

    return hashString;
}

Wie kann man Replay-Attacken verhindern?

Fügen Sie eine Einschränkung für den Zeitstempel hinzu, beispielsweise:

servertime - X minutes|seconds  <= timestamp <= servertime + X minutes|seconds 

(Serverzeit: Uhrzeit der Anfrage beim Server)

Und, die Signatur der Anfrage im Speicher zwischenspeichern (verwenden Sie MemoryCache, sollte in der Begrenzung der Zeit halten). Wenn die nächste Anfrage dieselbe Signatur mit der vorherigen Anfrage enthält, wird sie abgelehnt.

Der Demo-Code wird wie folgt eingegeben: https://github.com/cuongle/Hmac.WebApi





c# asp.net asp.net-mvc asp.net-web-api asp.net-mvc-5