2016-07-27 12 views
0

Ich entwickle gerade eine neue Anwendung für einen Kunden, und ich blieb mit einer Anfrage des Benutzers stecken.Daten zwischen Webapi und Controller teilen?

Die Anwendung ist ein einfaches Web mit Bootstrap, zeigt die Anwendung ein paar Seiten und verwendet Webapi, um die Dateninteraktion mit dem Server durchzuführen. So weit, ist es gut.

Der Client fordert mich auf, eine Möglichkeit zum Speichern der Suche zu erstellen, die der Benutzer für die gesamte Sitzung ausführen soll. Wenn also der Client in der aktuellen Sitzung dieselbe Seite durchsucht, wird die Suche erneut auf die Seite geladen.

was ich dachte, war die serialisierung der suche, wenn es das webapi in der sitzung trifft oder es wäre toll, es in tempdata zu speichern.

aber ich weiß, dass WebAPI Sitzung weniger ist, und ich kann damit, dass aktivieren:

protected void Application_PostAuthorizeRequest() 
{ 
    if (IsWebApiRequest()) 
    { 
     HttpContext.Current.SetSessionStateBehavior(SessionStateBehavior.Required); 
    } 
} 

Aber was ich will, ist jemand, mich zu zeigen, welches der beste Weg ist, um dies zu erreichen.

Jeder Rat wird geschätzt.

Grüße

Antwort

1

ich derzeit diese Lösung in MVC4 verwenden und es funktioniert gut:

WebApiConfig.cs

public static class WebApiConfig 
{ 
    public static string UrlPrefix   { get { return "api"; } } 
    public static string UrlPrefixRelative { get { return "~/api"; } } 

    public static void Register(HttpConfiguration config) 
    { 
     config.Routes.MapHttpRoute(
      name: "DefaultApi", 
      routeTemplate: WebApiConfig.UrlPrefix + "/{controller}/{id}", 
      defaults: new { id = RouteParameter.Optional } 
     ); 
    } 
} 

Global.asax.cs

public class MvcApplication : System.Web.HttpApplication 
{ 
    ... 

    protected void Application_PostAuthorizeRequest() 
    { 
     if (IsWebApiRequest()) 
     { 
      HttpContext.Current.SetSessionStateBehavior(SessionStateBehavior.Required); 
     } 
    } 

    private bool IsWebApiRequest() 
    { 
     return HttpContext.Current.Request.AppRelativeCurrentExecutionFilePath.StartsWith(WebApiConfig.UrlPrefixRelative); 
    } 

} 

Diese Lösung hat den zusätzlichen Vorteil, dass wir die AJAX für die Herstellung ruft die Basis-URL in Javascript abrufen kann:

_Layout.cshtml

<body> 
    @RenderBody() 

    <script type="text/javascript"> 
     var apiBaseUrl = '@Url.Content(ProjectNameSpace.WebApiConfig.UrlPrefixRelative)'; 
    </script> 

    @RenderSection("scripts", required: false) 

und dann in unserem Javascript-Dateien/Code können wir machen unsere WebAPI Anrufe, die die Sitzung zugreifen können:

$.getJSON(apiBaseUrl + '/MyApi') 
    .done(function (data) { 
     alert('session data received: ' + data.whatever); 
    }) 
); 
0

ich weiß, dass dies eine alte Post, aber was ich habe, ist aufgefallen, dass, obwohl die Session-ID für den WEB-API zurückgegeben wird, ist es für jede Anforderung unterschiedlich ist. Wissen Sie vielleicht, wie Sie die WEB-API-Sitzungs-ID konsistent machen können? Ich habe eine Anwendung, die BEIDE MVC und WEB API hatte. In MVC ist die Sitzungs-ID konsistent, in der WEB-API jedoch nicht.

+0

Nop, ich habe keine Ahnung, tut mir leid. – Rothariger