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

C# 如何将不同的参数传递给实现相同接口的不同http请求类,c#,oop,interface,architecture,C#,Oop,Interface,Architecture,我正在开发一个C#程序,该程序必须执行各种HTTP请求以获取不同类型的信息(某个地区特定商品的价格、某个商品的价格历史、两个地区之间的路线等) 我首先实现了一个IRequest接口,该接口包含所有请求都必须具有的两个属性: public interface IRequest { ReturnDataType DataReturnType { get; } HttpWebRequest HttpRequest { get; } } public enum ReturnDataT

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

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

public interface IRequest
{
    ReturnDataType DataReturnType { get; }

    HttpWebRequest HttpRequest { get; }
}

public enum ReturnDataType
{
    Xml,
    Json
};
我想在该接口中添加一个列表(或任何其他容器),其中包含请求的参数(将添加到URL中),以便我可以通过引用IRequest接口来访问这些参数。不幸的是,由于每个http请求不一定有相同的请求,如果有,也不一定有相同的顺序,我不知道如何实现这一点。我提出的唯一解决方案是在接口中有一个
列表
,并且依靠程序员读取http请求a的列表中参数x总是第一个,参数y总是第二个,等等,http请求b的参数z总是第一个,等等


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

您可以执行以下操作:

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

public GetItemHistoryRequest: IRequest
{
        // my properties
}
对于每个请求,等等。并为每个请求创建一个响应类。这样更干净,更有条理。此外,您知道基于请求对象类型需要哪些参数。也就是说,如果传递的请求对象的类型是
GetItemPriceRequest
;然后我会看到
ItemNumber
字段


我希望这将有助于你解决你的问题。如果你有问题,请告诉我

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

如何

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


可以帮助您-它处理一系列调用(更多详细信息)。

我有一个工厂,它创建适当的请求并返回
IRequest
。如果我执行以下操作:
GetItemPriceRequest请求=(GetItemPriceRequest)RequestFactory(GetItemPriceRequestString)
,如果已经填充了这些属性,我是否有权访问
ItemNumber
UserName
?GetItemPriceRequestString是类的名称?或者它是什么?您应该可以访问项目编号和用户名,只要您执行Cast抱歉,我的工厂的真正签名是
CreateApiRequest(ApiRequestType requestType)
其中
ApiRequestType
是一个枚举,用于指示我们要实例化的请求。仅需确认,如果在
GetItemPriceRequest
类的构造函数中,我使用值填充
ItemNumber
UserName
,我将有权访问这些值(在构造函数中填充),即使它是由
CreateApiRequest(ApiRequestType requestType)返回的
作为IRequest?我猜
CreateApiRequest
将返回从
IRequest
继承的对象。只要将此返回的对象强制转换为您的类型(
GetItemPriceRequest
),则强制转换后您将有权访问其所有属性(
ItemNumber
)。