Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-mvc/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Asp.net mvc MVC控制器和WebApi控制器之间的共享会话_Asp.net Mvc_Session_Asp.net Mvc 5 - Fatal编程技术网

Asp.net mvc MVC控制器和WebApi控制器之间的共享会话

Asp.net mvc MVC控制器和WebApi控制器之间的共享会话,asp.net-mvc,session,asp.net-mvc-5,Asp.net Mvc,Session,Asp.net Mvc 5,我有一个web服务,它有一个MVC控制器和一个WepAPI 2控制器 MVC控制器的任务是呈现并返回部分视图的HTML。另一个MVC应用程序进行该调用,然后将生成的HTML嵌入到自己的页面中 部分视图包含一些控件,这些控件调用WebAPI控制器以临时存储数据。为此,我在Global.asax.cs中使用以下代码在WebAPI控制器中启用了会话: 当调用应用程序调用MVC控制器时,它将模型传递给它。此模型包含部分视图上的控件需要显示的一些初始数据。这与控件将使用WebAPI控制器创建/更新/删除的

我有一个web服务,它有一个MVC控制器和一个WepAPI 2控制器

MVC控制器的任务是呈现并返回部分视图的HTML。另一个MVC应用程序进行该调用,然后将生成的HTML嵌入到自己的页面中

部分视图包含一些控件,这些控件调用WebAPI控制器以临时存储数据。为此,我在Global.asax.cs中使用以下代码在WebAPI控制器中启用了会话:

当调用应用程序调用MVC控制器时,它将模型传递给它。此模型包含部分视图上的控件需要显示的一些初始数据。这与控件将使用WebAPI控制器创建/更新/删除的数据类型相同。我希望将模型中的数据放入会话中,以便部分视图中的控件能够读取/更新/删除此数据


我的问题是:有没有办法让MVC控制器访问WepAPI会话?或者有没有办法让WebAPI控制器使用与MVC控制器相同的会话?

在Global.asax中添加以下代码

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

}

尽量避免像这样将状态硬塞进应用程序中-将需要发送到ApicController的数据作为隐藏字段或数据属性放入视图中,这样您就可以在不依赖会话状态的情况下发送它们。我不能。部分视图中的控件是依赖于具有CRUD方法的服务器的剑道网格。为了使网格正常工作,我必须将数据存储在服务器上。检查
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);
    }

}