如何将不同的参数传递给实现相同接口的不同http请求类

How to pass different parameters to different http request classes that implement the same interface

我正在开发一个 C# 程序,它必须执行各种 HTTP 请求以获取不同类型的信息(某个地区特定商品的价格、某个商品的历史价格、两个区域之间的路线等)。

我首先实现了一个 IRequest 接口,该接口包含所有请求都必须具有的两个属性:

public interface IRequest
{
    ReturnDataType DataReturnType { get; }

    HttpWebRequest HttpRequest { get; }
}

public enum ReturnDataType
{
    Xml,
    Json
};

我想在该接口中添加一个包含请求参数的列表(或任何其他容器)(将添加到 URL),以便我可以通过引用访问它们IRequest 接口。不幸的是,由于每个 http 请求不一定有相同的请求,而且即使有也不一定有相同的顺序,我不知道如何实现这一点。我想出的唯一解决方案是在界面中有一个 List<String>,并依靠程序员读取参数 x 应始终在列表中排在第一位,对于 http 请求 a,参数 y 第二,等等,参数 z 总是首先用于 http 请求 b,等等

因为我可能是唯一一个接触这段代码的人,所以它可能不会在很长一段时间内造成问题 运行,但如果存在更好的解决方案,我仍然希望使用。

你能做到以下几点吗:

public class GetItemPriceRequest: IRequest
{
        public string ItemNumber {set;get;}
        public string UserName {set;get;}
}

public GetItemHistoryRequest: IRequest
{
        // my properties
}

等等每个请求。并对每个请求做出响应 class。这种方式更干净,更有条理。此外,您知道根据请求对象类型期望的参数。意思是,如果传递的请求对象是 GetItemPriceRequest 类型;然后我应该看到 ItemNumber 字段。

希望能帮助您解决问题。如果您有问题,请告诉我。

作为补充,您会发现 Command design pattern 很有帮助 - 它将命令请求封装为一个对象。此外,您还可以使用不同的请求、队列或日志请求对客户端进行参数化,并支持可撤销的操作。

以及如何

to do various HTTP request to get different kinds of information

可以帮到你ParameterObject - it deals with a chain of calls (more details here).