是否有一个项目可以自动生成JavaScript代理代码来调用ASP..NET MVC动作方法

Is there a project that auto-generates JavaScript proxy code to call ASP.NET MVC action methods?

本文关键字:NET ASP 调用 MVC 方法 代码 项目 有一个 自动生成 代理 JavaScript      更新时间:2023-09-26

是否有c#代码采用现有控制器,分析其公共Action方法并生成JavaScript代理类,以便其他JavaScript代码可以轻松调用它?我已经知道我们可以用jquery来做$。Post和$。调用我们的ajax服务,但我相信不必指定ajax web服务url的相对url和每个参数输入的参数名,可以简化这个过程。

例如,假设我们有以下c#控制器:
public class CustomerController : Controller
    {
        public JsonResult Create(string name, string address)
        {
            return new JsonResult {Data = 11111};
        }
        public JsonResult Update(int id, string name, string address)
        {
            return new JsonResult {Data = true};
        }
    }

我想用下面的方式调用控制器的AJAX动作方法。

Proxy.Customer.Create("Scott Gu", "Somewhere in Redmond").done(function(id) {
      /* id is an int and not an string */
      Proxy.Customer.Update(id, "Scott Gu", "Somewhere in Seattle");
});

是否存在允许我这样做的项目?

结果没有一个项目能满足我的要求。除了SignalR之外,还有Phil Haack的Controller Inspector项目。它可以检查任何给定的控制器,并显示它有什么动作方法,它接受的参数,它们的类型等。

下面的链接包含getter方法,用于检索给定控制器的详细信息。https://github.com/Haacked/CodeHaacks/blob/master/src/MvcHaack.ControllerInspector/ControllerDetailer.cs

更新2

哎。Phil Haack已经开发了一个JavaScript代理。

我知道,这是一个老问题,但我刚刚找到了一个项目,似乎符合您的要求:

ProxyApi , 史蒂夫Greatrex
http://blog.greatrexpectations.com/2012/11/06/proxyapi-automatic-javascript-proxies-for-webapi-and-mvc/

我不知道有哪个项目完全符合你的要求,但你看过David Fowl的SignalR吗?这个项目有一个基于SignalR集线器而不是MVC控制器的javascript代理生成器。我相信代码是可以修改的。

如果你从github获得源代码并查看示例项目,那里有一个聊天室示例。使用firebug/chrome开发工具等,你可以看到javascript被调用。

从我所看到的javascript是通过代理创建的。在示例项目中,有一个"hubs"文件夹,其中包含通过代理插入到javascript文件中的方法。

实际的代理工作是在核心SignalR库中完成的,这是默认使用的javascript代理生成器。

你可以在这里看到一个实时的聊天样本,David Fowl有时也在房间里。我相信他能比我更好地解释代理的事情。

Phil Haack有一个项目可以解决我的一个需求。它仍然需要将每个参数输入与参数名称配对。

这个优秀的另一个项目允许您做您所要求的。
http://jsnet.codeplex.com/
这个项目会自动为MVC和WebApi控制器生成JavaScript代理。

有了这个项目,你也会有智能感知。

例子
window.test = function test() {
/// <summary>
///This example works.
///You have the Intellisense. It's great!!!
///No hard coded url.
///</summary>
//-- settings of ajax request.
var a = $dpUrlSet.Customer.Create.$action0.$AjaxSettings();
//-- your parameters of action method
a.data.name = "Scott Gu";
a.data.address = "Somewhere in Redmond";
//-- stringify
a.data = JSON.stringify(a.data);
//-- send ajax request
var xhr = $.ajax(a);
xhr.success(function (id) {
    /// <summary>Response of ajax request</summary>
    //-- settings of ajax request.
    var a = $dpUrlSet.Customer.Update.$action0.$AjaxSettings();
    //-- your parameters of action method
    a.data.id = id;
    a.data.name = "Scott Gu";
    a.data.address = "Somewhere in Seattle";
    //-- stringify
    a.data = JSON.stringify(a.data);
    //-- send ajax request
    var xhr = $.ajax(a);
});
}