2016-07-27 170 views
0

我目前正在爲一個客戶開發一個新的應用程序,並且我被用戶的請求卡住了。在webapi和控制器之間共享數據?

該應用程序是一個簡單的web引導程序,該應用程序顯示了幾頁,並使用webapi來執行與服務器的數據交互。到現在爲止還挺好。

客戶端要求我創建一種方法來保存用戶在整個會話中執行的搜索。因此,如果當前會話中的客戶端確實瀏覽同一頁面,搜索將重新加載到該頁面。

我認爲當它在會話中點擊webapi時序列化搜索,或者將它保存在tempdata中會很好。

,但我知道的WebAPI是會話少,我可以激活與此:

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

但我想是有人點我這是實現這一目標的最佳途徑。

任何意見將不勝感激。

問候

回答

1

我目前使用MVC4這個解決方案,它的工作很好:

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); 
    } 

} 

該解決方案的好處是,我們可以在JavaScript中獲取基本URL使得AJAX調用:

_Layout.cshtml

<body> 
    @RenderBody() 

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

    @RenderSection("scripts", required: false) 

,然後我們的JavaScript文件/代碼中,我們可以讓我們的的WebAPI調用,可以訪問會話:

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

我知道這是一個老的文章,但我已經注意到的是,即使返回的WEB API會話ID,它是爲每個請求的不同。你可能知道一種方法可以使WEB API會話ID保持一致。我有一個具有MVC和WEB API的應用程序。在MVC中,會話ID是一致的,但在WEB API中不是。

+0

Nop,我不知道,對不起。 – Rothariger

相關問題