こんにちは、最初の質問はここにあるので、何かが合わない場合は教えてください。Web API ASP .NET/Angular2がAzureセッションでホストされていません
このWeb APIをC#とAngular2で開発します。 機能の1つに効率的なセッションが必要です。私は数日間、これに取り掛かっている多数のトピックと記事を調べました。
if (HttpContext.Current.Session != null) HttpContext.Current.Session["Object"] = myNotNullVariable;
サーバー側は、CORSが(*どこでもフロントとCORSエラーとなるジョーカーを使用して)EnableCors属性で有効になっている :
[EnableCors(origins: "http://localhost:4200,http://mywebapifronturl,http://mywebapibackurl",headers: "accept,content-type,origin,expires,cookie,authorization",methods: "*",exposedHeaders: "set-cookie",SupportsCredentials = true)]
[RoutePrefix("api/project")]
public class ProjectController : ApiController
私は何気なく、このようなセッションで、私のオブジェを保存します
myGetFunctionWhichNeedsSession(): Observable<Array<ModelModel>>{ return this.http.get(environment.baseUrl + '/api/myController/myGetFunctionWhichNeedsSession/') .map(res => res.json()); }
は、フロントエンド要求であります3210以下
は私WebApiConfigです:
public static string UrlPrefix { get { return "api"; } }
public static string UrlPrefixRelative { get { return "~/api"; } }
public static void Register(HttpConfiguration config)
{
// Configuration et services API Web
// Itinéraires de l'API Web
config.MapHttpAttributeRoutes();
config.EnableCors();
config.Routes.MapHttpRoute(
name: "DefaultApi",
routeTemplate: "api/{controller}/{id}",
defaults: new { id = RouteParameter.Optional }
);
}
その後、私のGlobal.asaxの作品:
protected void Application_PostAuthorizeRequest()
{
if (IsWebApiRequest())
{
HttpContext.Current.SetSessionStateBehavior(System.Web.SessionState.SessionStateBehavior.Required);
}
}
private bool IsWebApiRequest()
{
return HttpContext.Current.Request.AppRelativeCurrentExecutionFilePath.StartsWith(WebApiConfig.UrlPrefixRelative);
}
void Session_Start(object sender, EventArgs e)
{
// Code that runs when a new session is started
Session.Timeout = 10080;
}
結局私のWeb.configファイル:
<system.web>
<sessionState mode="InProc" timeout="10080" />
<compilation debug="true" targetFramework="4.5.2" />
<httpRuntime targetFramework="4.5.2" />
<httpModules>
<add name="ApplicationInsightsWebTracking" type="Microsoft.ApplicationInsights.Web.ApplicationInsightsHttpModule, Microsoft.AI.Web" />
</httpModules>
</system.web>
私は唯一のバックエンドAPIをテストする場合RestletClientでは問題ありませんが、私がFrontend Angleセッションで試してみると動作しません。