让网站离线但不是API

Gia*_*los 2 asp.net-mvc asp.net-web-api

我有一个ASP.NET MVC网站,它也有WEB API和OData端点.有没有办法让网站脱机,但保持API和OData工作?

我尝试在根目录上放置App_Offline.htm,但这使得所有区域都处于脱机状态.

Sam*_*ari 5

写一个ActionFilterAttribute并将其注册为全局过滤器:

public class MyFilterAttribute : ActionFilterAttribute
{
    private string _offlineUrl;
    public MyFilterAttribute(string offlineUrl)
    {
        _offlineUrl = offlineUrl;
    }
    public override void OnActionExecuting(ActionExecutingContext filterContext)
    {
        // considering you have a API controller
        // and you have a Boolean app setting named BringMVCRoutesOffline
        // to activate this filter form web.config 
        // in real world scenario you could check area or what URL
        // or route data you want
        if (Convert.ToBoolean(ConfigurationManager.AppSettings["BringMVCRoutesOffline"])
            && filterContext.RouteData.Values.ContainsKey("controller")
            && !filterContext.RouteData.Values["controller"]
                .ToString().ToLower() == "api"
            // avoiding infinite loop 
            && filterContext.HttpContext.Request
                .AppRelativeCurrentExecutionFilePath != _offlineUrl)
        {
            filterContext.Result = new RedirectResult(_offlineUrl);
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

并在App_Start> FilterConfig中添加:

filters.Add(new MyFilterAttribute("~/error/offline"));
Run Code Online (Sandbox Code Playgroud)