2016-07-27 168 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

相关问题