代码之家  ›  专栏  ›  技术社区  ›  Marko

asp.net mvc作为restful服务和应用程序?

  •  1
  • Marko  · 技术社区  · 17 年前

    1. 查找并翻译某些术语,例如“目录”应用程序中按钮的标题
    2. 启动该应用程序(例如,2.中的“Catalog”应用程序),并通过web服务使用这些翻译的术语更新本地数据库

    这是我们的旧解决方案,效果很好。

    或者更简单的问题,我如何将asp.net mvc用作web服务。你有什么经验?

    马可

    2 回复  |  直到 17 年前
        1
  •  2
  •   Samantha Branham    17 年前

    这真的取决于你的需求。你当然可以使用ASP。NET MVC应用程序作为数据服务,但听起来你应该将共享代码整理到一个公共库中,并在两个应用程序中引用该库。web服务项目提供的一些东西纯粹作为控制器操作会更加困难。(反序列化、wsdl等)

        2
  •  1
  •   Matt Kocaj    17 年前

    例如:jQuery很好地使用了JsonResults,因为我可以从动作中返回复杂的对象(包括集合、数组、嵌套对象等),并让jQuery将其反序列化为javascript对象,以便在客户端浏览器中使用。当然,序列化过程会降低类型安全性,但这在大多数基于REST/SOAP的web服务中都是意料之中的。如果你真的需要消费应用程序的类型安全,请坚持使用WCF(或类似工具)。

        public ActionResult GetPeople()
        {
            IList<Person> result = svc.GetPeople();
    
            return View(result);
        }
    

    ..此操作的结果通常会呈现在某个视图中。这很好,但如果你想将该操作用作web服务,你可以简单地将其更改为:

        public ActionResult GetPeople(string ajax)
        {
            IList<Person> result = svc.GetPeople();
    
            if (Convert.ToBoolean(ajax))
                return Json(result);
            else
                return View(result);
        }
    

    ..所以,如果你的消费应用程序不介意序列化的Json,那么就不要像这样调用GET请求 http://domain.com/controller/GetPeople http://domain.com/controller/GetPeople?ajax=true 返回Json。一个更合适的标志可能是“json”而不是“ajax”——“ajax”很常见,因为这种方法用于支持低级浏览器的操作,这些操作可以选择用ajax调用。

    我一直在考虑将此添加到我的mvc应用程序中,但我不喜欢用此标志修改每个操作并添加更多if语句的想法。我的想法是创建一个自定义属性来装饰您想要此功能的操作,该属性动态添加额外的标志,并有条件地将模型数据作为Json返回,而不是最初指定的值。试试看。