Asp.net mvc ASP.NET MVC结果返回帮助程序

Asp.net mvc ASP.NET MVC结果返回帮助程序,asp.net-mvc,json,Asp.net Mvc,Json,我发现自己需要从控制器操作向客户机返回各种JSON结果。我已经创建了ContentResult类型的静态“helper”方法。我希望能够在多个项目中重用这些帮助程序,因此我已经在它们自己的类中创建了它们,不久的将来,我会将它们移动到它们自己的程序集中 这里是我的问题:其中一些返回帮助程序需要访问控制器上下文,所以我在控制器上创建了扩展方法。我喜欢Html助手方法是HtmlHelper类上的扩展方法的方式,但我找不到与View类上的Html属性类似的合适控制器属性,所以我只是扩展了控制器下面是返回

我发现自己需要从控制器操作向客户机返回各种JSON结果。我已经创建了ContentResult类型的静态“helper”方法。我希望能够在多个项目中重用这些帮助程序,因此我已经在它们自己的类中创建了它们,不久的将来,我会将它们移动到它们自己的程序集中

这里是我的问题:其中一些返回帮助程序需要访问控制器上下文,所以我在控制器上创建了扩展方法。我喜欢Html助手方法是HtmlHelper类上的扩展方法的方式,但我找不到与View类上的Html属性类似的合适控制器属性,所以我只是扩展了控制器下面是返回帮助器中的代码。我想知道是否有更好的方法来做到这一点。

    public static ContentResult AJAXRedirect(this Controller cont, string action,
        string controller, object routeValues)
    {
        string url = cont.Url.Action(action, controller, routeValues);
        string json = "{{\"redirect\": \"{0}\" }}";
        json = string.Format(json, url);
        return new ContentResult
        {
            Content = json,
            ContentType = "text/x-json",
            ContentEncoding = Encoding.UTF8
        };
    }

您可以使用以下代码:

string url = cont.Url.Action(action, controller, routeValues);
return Json(new { redirect : url });
扩展控制器似乎是一种好方法。Content()、View()、Json()和Empty()方法也是控制器扩展。您正在添加自己的

编辑


对不起,我对扩展方法的理解是错误的。它们不是扩展方法。因此,如果您将自己的基本控制器类与其他方法一起使用会更好。因为您将在类中使用这些方法,所以继承是最好的解决方案。您仍然可以在项目之间共享该类。

使用JsonResult而不是ContentResult如果它们是controller上的扩展,而我的也是,那么为什么我必须调用我的类,如:this.AJAXRedirect(),但我不必将其用于其他项目?@LukLed,我有一个基本控制器类,然而,很多特定于项目的东西最终都会进入其中,所以在项目之间共享是不现实的。我想我在什么地方读到过关于使用结果助手的正式方法,但我现在找不到。@Josh Pearce:您不必使用一个基本控制器类。您可以为每个项目创建一个,从中继承,并为特定项目创建另一个独立的。