为C#webmethod制作参数的最佳方法

Joh*_*ams 2 c# arrays arguments overloading visual-studio

支持传递给C#函数的可选数据的最佳方法是什么?

我在.Net中有web服务功能,定义了5个参数:

[WebMethod]
    public string UploadFile( string wsURL
        , byte[] incomingArray
        , string FileName
        , string RecordTypeName
        , MetaData[] metaDataArray)
Run Code Online (Sandbox Code Playgroud)

这个函数的代码不是太长(但也不是很简单),如果要处理任何MetaData [],我执行此测试的函数中只有一个位置:

        if (metaDataArray.Length > 0)
        {
            Update update = BuildMetaData(metaDataArray);
            treq2.Items = new Operation[] { sru, cin, update, fetch};
        }
        else
        {
            treq2.Items = new Operation[] { sru, cin, fetch};
        }
Run Code Online (Sandbox Code Playgroud)

我需要上面的快速和脏版本,只需要4个参数(即没有"元数据"数组作为最终参数)所以我克隆了整个函数并删除了引用元数据的IF-ELSE块.丑陋,我知道.

[WebMethod]
    public string UploadFileBasic( string wsURL
        , byte[] incomingArray
        , string FileName
        , string RecordTypeName)
Run Code Online (Sandbox Code Playgroud)

现在我想做更好的事情,我正在寻找有关支持这一点的最佳方法的建议.我不想通过创建一个空数组作为第五个参数来加重客户端程序...我希望我的Web服务功能足够智能来处理这个可选数据.谢谢.

tva*_*son 7

在需要5个参数的方法中更改您的检查(注意,您应该检查该值是否为null).

    if (metaDataArray != null && metaDataArray.Length > 0)
    {
        Update update = BuildMetaData(metaDataArray);
        treq2.Items = new Operation[] { sru, cin, update, fetch };
    }
    else
    {
        treq2.Items = new Operation[] { sru, cin, fetch};
    }
Run Code Online (Sandbox Code Playgroud)

然后,让你的4参数版本在内部调用5参数版本,metaDataArray参数为null.

[WebMethod]
public string UploadFileBasic( string wsURL,
                               byte[] incomingArray,
                               string FileName,
                               string RecordTypeName)
{
    return UploadFile( wsUrl, incomingArray, fileName, RecordTypeName, null );
}
Run Code Online (Sandbox Code Playgroud)