【问题标题】:c# WCF REST strongly typed WebGet object for parameters and validationc# WCF REST强类型WebGet对象用于参数和验证
【发布时间】:2011-08-31 15:48:54
【问题描述】:

您可以像在 ASP.NET MVC 中一样在 WCF 4.0 Rest 中执行以下操作吗?

在 ASP.NET MVC 中,我可以创建一个通常称为 ViewModel 的强类型对象来处理错误验证。

而不是以下:

public ActionResult SomeAction(string firstname, string lastname, string address, int phone)

我可以有以下几点:

public ActionResult SomeAction(UserObject obj)

其中UserObject定义为:

public class UserObject
{
   [Required(ErrorMessage = "firstname is a required paramater")]
   public string firstname { get; set; }
   [StringLength(50, ErrorMessage = "lastname is too long")]
   public string lastname { get; set; }
   [StringLength(160)]
   public string address { get; set; }
   public int phone { get; set; }
}

我基本上想要做的是在强类型对象中创建参数并在那里显示我的错误消息。然后我可以将错误消息格式化为 xml 并将其返回给用户。

所以在 WCF REST 中。而不是我的方法看起来像:

[WebGet]
public IEnumerable<ObjectResult> SomeAction(string firstname, string lastname, string address, int phone)

我想要以下:

[WebGet]
public IEnumerable<ObjectResult> SomeAction(UserObject obj)

这在 WCF REST 4.0 中可行吗?

【问题讨论】:

    标签: c# asp.net-mvc wcf rest


    【解决方案1】:

    默认 WCF 无法做到这一点。您必须使用 IDispatchMessageFormatter 的自定义实现来创建自定义行为,以从查询字符串中收集参数并构建对象。 Here is an example 如何构建这样的行为和格式化程序。这就像您必须为 ASP.NET MVC 中的每个自定义 ViewModel 编写自定义模型绑定器。

    顺便说一句。也没有内置逻辑可以简单地允许您调用验证(如 MVC 中的Model.IsValid)。您将需要手动使用与数据注释一起使用的基础架构类 (System.ComponentModel.DataAnnotations.Validator)。

    【讨论】:

    • 无赖。感谢您的解释!我实际上打算使用企业库 5.0 验证块,但为简单起见,我在帖子中省略了细节。再次感谢!
    猜你喜欢
    • 1970-01-01
    • 2011-08-19
    • 2011-12-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-03-12
    相关资源
    最近更新 更多