小编DGr*_*een的帖子

使用MVC Action Filter捕获Ajax请求中的重定向并返回JsonResult

在我的ASP.NET MVC 3应用程序中,我有一些可以使用Ajax和非Ajax请求调用的操作方法.操作方法可以返回RedirectResult,我希望在浏览器中加载目标URL - 即使对于Ajax请求也是如此.

我目前的解决方案是使用action方法调用IsAjaxRequest本身.如果为false,则返回RedirectResult.如果为true,则返回包含目标URL的JsonResult,并且我在浏览器中有脚本来读取它并相应地设置window.location.

我希望整理动作方法并在过滤器中处理它.我的问题是目标URL(filterContext.HttpContext.Response.RedirectLocation)在OnResultExecuted以外的过滤器事件处理程序中为空,并且在该处理程序中设置filterContext.Result(并且更改response.StatusCode)不能成功发出JSON响应.

如果我使用其他处理程序之一,例如OnActionExecuted,我可以更改响应以发出JSON,但无法获取目标URL.

两步过程也不起作用 - 如果我在OnActionExecuted中将结果更改为JsonResult,则OnResultExecuted中的RedirectLocation为null.

任何人都可以重新创建此问题或建议更好的解决方案?谢谢.

PS这里是来自OnResultExecuted的代码:

if ((filterContext.Result is RedirectToRouteResult || 
     filterContext.Result is RedirectResult) && 
     filterContext.HttpContext.Request.IsAjaxRequest())
{
    string url = filterContext.HttpContext.Response.RedirectLocation;

    filterContext.HttpContext.Response.StatusCode = (int)HttpStatusCode.OK;

    filterContext.HttpContext.Response.RedirectLocation = "";

    filterContext.Result = new JsonResult
    {
        Data = new { Redirect = url },
        ContentEncoding = System.Text.Encoding.UTF8,
        ContentType = "application/json",
        JsonRequestBehavior = JsonRequestBehavior.AllowGet
    };
}
Run Code Online (Sandbox Code Playgroud)

asp.net-mvc-3

9
推荐指数
1
解决办法
8396
查看次数

Roslyn - 如何可靠地为一个类格式化空格

我需要格式化一个类,以确保它易于人类阅读.我有语法树,根CompilationUnitSyntax和ClassDeclarationSyntax.我按如下方式格式化空白.

root = root.ReplaceNode(classSyntax, classSyntax.NormalizeWhitespace(elasticTrivia: true));
syntaxTree = syntaxTree.WithRootAndOptions(root, syntaxTree.Options);
Run Code Online (Sandbox Code Playgroud)

之前:

#region MyRegion
public class MyClass
{

    // Info about MyClass

}
#endregion
Run Code Online (Sandbox Code Playgroud)

后:

#region MyRegion
public class MyClass
{
// Info about MyClass    
}#endregion
Run Code Online (Sandbox Code Playgroud)

为什么班级的闭幕式猛烈撞击#endregion?

如果我在'After'文本上再次运行NormalizeWhitespace,则#endregion将向下移动到其自己的行上.然后再调用NormalizeWhitespace再次将其重新启动.到底是怎么回事?

c# roslyn

5
推荐指数
1
解决办法
532
查看次数

标签 统计

asp.net-mvc-3 ×1

c# ×1

roslyn ×1