gpt4 book ai didi

c# - 如何阻止 setter 通过 Web 服务公开?

转载 作者:行者123 更新时间:2023-11-30 15:47:20 25 4
gpt4 key购买 nike

我想上这样的课,

public class Apple
{
public string Size { get; set;}
public string Colour { get; set;}
public string Shape { get; set;}
public int appleId { get; set;}
}

我想使用像这样的一些 web 方法通过 web 服务公开它,

public void AddApple(Apple apple)
{
}

public Apple GetApple(int appleId)
{
}

因此,当我在 visual studio 中向该 Web 服务添加服务引用时,我会为我生成客户端代理对象,从而允许我在客户端创建一个 Apple 并将其发送到 Web 服务。

有没有办法让其中一个属性在客户端只读?我需要那里的 setter ,以便我可以在服务器端设置值,但我想控制它们可以在客户端更新哪些数据。

有什么想法吗?

我能做的是在构造函数中传递一些数据,并且只在我想只读的那些上公开 getter,但我想在服务器端使用对象映射器。这意味着理想情况下我想把二传手留在那里。

最佳答案

一般来说,您无法控制在客户端生成的代理。所以正确的方法是忽略客户端发送的值(或者如果他更改这些值则引发异常)。服务文档必须明确提及此类内容。

编辑:另一种解决方法是将您的数据类分为两类 - 一个是客户端不可编辑的(比如 Apple1),另一个是可编辑的 - 比如 Apple2。所以现在服务更新方法只能接受Apple2,这样客户端可以通过查看生成的代理代码知道他可以更改什么。在服务器端,您可以让 Apple1 继承自 Apple2 以获得完整的数据,但我相信在客户端生成的代理将/可以有两个不同的不相关类。在这种情况下,也许更好的方法是使用包含 Apple1 和 Apple2 的复合完整 AppleFull。

关于c# - 如何阻止 setter 通过 Web 服务公开?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3674018/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com