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

时间:2015-03-06 04:52:21

标签: c# oop interface architecture

我正在开发一个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等。

由于我可能会成为唯一接触此代码的人,因此从长远来看可能不会引起问题,但如果存在问题,我仍然希望使用更好的解决方案。

2 个答案:

答案 0 :(得分:1)

你能做到以下几点:

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

public GetItemHistoryRequest: IRequest
{
        // my properties
}
每个请求

等等。并为每个请求提供响应类。这种方式更清洁和组织。此外,您知道基于请求对象类型的预期参数。意思是,如果传递的请求对象是GetItemPriceRequest类型;然后我应该看到ItemNumber字段。

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

答案 1 :(得分:1)

作为补充,您可以找到有用的Command design pattern - 它将命令请求封装为对象。此外,您还可以使用不同的请求,队列或日志请求参数化客户端,并支持可撤销操作。

以及如何

  

执行各种HTTP请求以获取不同类型的信息

可以帮助您ParameterObject - 它会处理一连串电话(更多详情here)。