2016-07-27 3 views
0

저는 현재 고객을위한 새로운 응용 프로그램을 개발 중이며 사용자로부터의 요청을 받아 들였습니다.webapi와 컨트롤러간에 데이터를 공유 하시겠습니까?

응용 프로그램은 부트 스트랩이있는 간단한 웹이며, 응용 프로그램은 몇 페이지를 표시하고 webapi를 사용하여 서버와의 데이터 상호 작용을 수행합니다. 여태까지는 그런대로 잘됐다.

클라이언트는 사용자가 전체 세션에 대해 수행하는 검색을 저장하는 방법을 만들어달라고 요청하고 있습니다. 따라서 현재 세션의 클라이언트가 동일한 페이지를 탐색하면 검색이 페이지에 다시로드됩니다.

나는 그것이 세션에서 webapi에 부딪 힐 때 검색을 직렬화한다고 생각했거나 tempdata에 저장하는 것이 좋을 것입니다.

는하지만 난 webapi 세션 작다는 것을 알고, 나는이와 그를 활성화 할 수 있습니다

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

을하지만 내가 원하는 것은 이러한 목표를 달성하는 가장 좋은 방법 인 저를 지적하는 사람입니다.

모든 조언을 주시면 감사하겠습니다.

감사

답변

1

나는 현재 MVC4에서이 솔루션을 사용하고 그것을 잘 작동하고 :

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

} 
Global.asax.cs을

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

이 솔루션은 우리가 AJAX를 만들기위한 자바 스크립트의 기본 URL을 가져올 수있는 추가 보너스 호출했습니다

_Layout.cshtml 우리의 자바 스크립트 파일/코드 내 다음

<body> 
    @RenderBody() 

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

    @RenderSection("scripts", required: false) 

우리가 할 수있는 우리의

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

나는 이것이 이전 게시물 알고하지만 내가 발견 한 것은 세션 ID는 웹 API에 대해 반환하더라도, 그것은 각각의 요청에 대해 서로 다른 점이다 : 세션에 액세스 할 수 있습니다 webapi 통화. 웹 API 세션 ID를 일관되게 유지할 수있는 방법을 알고있을 것입니다. 나는 MVC와 WEB API를 모두 가지고있는 애플리케이션을 가지고있다. MVC에서는 세션 ID가 일관되지만 WEB API에서는 그렇지 않습니다.

+0

Nop, 나도 몰라, 미안. – Rothariger

관련 문제