Beste måten å lage et argument valgfritt for en C # WebMethod

stemmer
2

Hva er den beste måten å støtte valgfrie data sendes til en C # funksjon?

Jeg har web servicefunksjon i .Net som definerer 5 argumenter:

[WebMethod]
    public string UploadFile( string wsURL
        , byte[] incomingArray
        , string FileName
        , string RecordTypeName
        , MetaData[] metaDataArray)

Koden til denne funksjonen er ikke altfor lang (men ikke triviell enten), og det er bare ett sted i den funksjonen der jeg utføre denne test dersom det er noen metadataene [] som skal behandles:

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

Jeg trengte en rask og skitne versjon av den ovenfor som bare tar 4 argumenter (dvs. ingen Metadata array som et endelig argument), så jeg klonet hele funksjonen og fjernet IF-ELSE blokk henvisende til metadata. Ugly jeg vet.

[WebMethod]
    public string UploadFileBasic( string wsURL
        , byte[] incomingArray
        , string FileName
        , string RecordTypeName)

Nå ønsker jeg å gjøre ting bedre, og jeg er ute etter råd om den beste måten å støtte dette. Jeg ønsker ikke å belaste kunden program med å lage en tom matrise som en femte parameter ... Jeg vil ha mine web servicefunksjoner for å være smart nok til å håndtere denne valgfrie data. Takk.

Publisert på 20/07/2009 klokken 20:37
kilden bruker
På andre språk...                            


4 svar

stemmer
3
private static readonly MetaData[] EmptyMetaData = new MetaData[0];

[WebMethod]
public string UploadFile(string wsURL
    , byte[] incomingArray
    , string fileName
    , string recordTypeName)
{
    return UploadFile(wsURL, incomingArray, fileName, recordTypeName, EmptyMetaData)
}
Svarte 20/07/2009 kl. 20:39
kilden bruker

stemmer
0
[WebMethod]
    public string UploadFileBasic( string wsURL
        , byte[] incomingArray
        , string FileName
        , string RecordTypeName)
{
    return UploadFile(wsURL, incomingArray, FileName, RecordTypeName, new MetaData[0]);
}

Da Last opp fil metoden håndterer alt, men du er i stand til å avsløre to grensesnitt avhengig av hva forbrukeren ønsker.

Svarte 20/07/2009 kl. 20:41
kilden bruker

stemmer
7

Endre sjekk i den metoden som tar 5 argumenter til (merk at du bør sjekke hvis verdien er null uansett).

    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};
    }

Deretter kan du enkelt få 4 argument versjon ringe fem argument versjonen internt med metaDataArray argument null.

[WebMethod]
public string UploadFileBasic( string wsURL,
                               byte[] incomingArray,
                               string FileName,
                               string RecordTypeName)
{
    return UploadFile( wsUrl, incomingArray, fileName, RecordTypeName, null );
}
Svarte 20/07/2009 kl. 20:43
kilden bruker

stemmer
2

Hva med å sette alle argumenter inkludert metadata Array i en enkelt klasse og bruke det som argument til webtjenesten:

public class UploadFileAgrument 
{
  public string wsURL;
  public byte[] incomingArray;
  public string FileName;
  public string RecordTypeName;
  public MetaData[] metaDataArray;
}

[WebMethod]
public string UploadFile(UploadFileAgrument fileToUpload)
{
  if(fileToUpload.metaDataArray!=null && metaDataArray.Length > 0)
  {
  }
  else
  {
  }  
}
Svarte 20/07/2009 kl. 20:49
kilden bruker

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more