2013-05-08 16 views
6

Ich möchte ASP.NET WebApi in einer SharePoint 2013-Farmlösung verwenden.SharePoint 2013 und ASP.NET WebApi

Ich weiß, dass es nicht out-of-the-Box unterstützt wird, aber ich fand SignalR can be run by means of a simple HttpModule, so dass ich mich fragte, ob ein ähnlicher Ansatz verwendet werden könnte.

Vielen Dank im Voraus, Rich-

UPDATE Juni 2013

Geschaffen arbeiten, um die HTTP-Module in dem genannten Beitrag gezeigt durch Nacharbeiten:

config.Routes.MapHttpRoute(
       name: "DefaultApi", 
       routeTemplate: "kms2013/api/{controller}/{action}", 
       defaults: new { } 
      ); 
config.IncludeErrorDetailPolicy = IncludeErrorDetailPolicy.Always; 
config.Services.Replace(typeof(IAssembliesResolver), new SPAssemblyResolver()); 

HostingEnvironment.RegisterVirtualPathProvider(new WebAPIVirtualPathProvider()); 

SPAssemblyResolver

public class SPAssemblyResolver : IAssembliesResolver 
{ 
    public ICollection<Assembly> GetAssemblies() 
    { 
     return new List<Assembly> { Assembly.GetExecutingAssembly() }; 
    } 
} 

WebAPIVirtualPathProvider

Gleiche wie SignalRVirtualPathProvider in der Post gezeigt.

NEUE AUSGABE

Das einzige Problem bei diesem Ansatz ist ScriptResource.axd und WebResource.axd jetzt brechen, wenn SP sie auf einer Seite verweist. Ich habe versucht, eine ignorieren Route hinzuzufügen:

RouteTable.Routes.Add(new Route("{resource}.axd", new StopRoutingHandler())); 

Aber ich erhalte immer 401 Unauthorized. Das Entfernen des Moduls löscht den Fehler, also fehlt uns noch ein letztes Puzzleteil.

+0

Ich nehme an, Sie müssen den Virtual Path Provider anpassen, siehe ein Beispiel hier: https://spsignal.codeplex.com/SourceControl/latest#MaxMelcher.SPSignalR/SignalRVirtualPathProvider.cs –

+1

Fein, die VPP-Implementierung, die Sie vorgeschlagen haben, schließt alle ein die fehlenden Fälle und alles funktioniert jetzt. Zuvor, _DirectoryExists_ ergeben verschiedene Arten von Fehlern, wenn _virtualDir.Contains fehlen ("my/api/path") _, von SharePoint JS-Fehler, defekte Suche, etc .. – user2363245

+0

Ich versuche, das gleiche zu tun und ich ' Ich bin fast da, aber ich bekomme einen Fehler, weil es den Controller nicht finden kann. Wenn nur das Webapi-Projekt bereitgestellt wird, funktioniert es einwandfrei, aber in SP bricht es. Hast du irgendwelche Vorschläge? –

Antwort

1

Ja, der gleiche Ansatz sollte funktionieren.

Erstellen Sie ein Web-API-Projekt und überprüfen Sie die App-Init-Teil - dann folgen Sie meinem Blog-Post Sie schon referenziert.

Btw: Fragen Sie bei sharepoint.stackexchange.com - vielleicht hat jemand eine bessere Lösung.

+0

Endlich Zeit, es zu versuchen, und tatsächlich einige Ergebnisse gesehen. Modul aus -> 404 nicht gefunden; Modul EIN -> 401 Nicht autorisiert. Ich muss mich noch wundern, warum, aber es sieht so aus, als müssten wir SharePoint-Sicherheit mit WebApi einrichten – user2363245

+0

Zweifel, überprüfe das iis Protokoll für den genauen Fehlercode, z. B. 401.1 –

+1

Gut, habe es funktioniert :-) Ich werde eine Erklärung so schnell wie möglich posten. Danke BTW! – user2363245

Verwandte Themen