Использование HTTP POST для URI - PullRequest
       5

Использование HTTP POST для URI

0 голосов
/ 06 сентября 2011

У меня есть служба RESTful WCF, у которой есть метод загрузки, принимающий более одного параметра. Это делается путем создания всех параметров, кроме Stream, части URI. Вот как метод выглядит в контракте:

[OperationContract, WebInvoke(UriTemplate = "UploadFile?username={username}&password={password}&filename={filename}")]
bool UploadFile(string username, string password, string filename, Stream fileContents);

Я еще не тестировал этот метод, но при условии, что он работает, есть большая проблема с ним: пароль будет виден в адресной строке. Как мне скрыть эти параметры, оставляя их частью UriTemplate? Они нужны мне как часть URI, поскольку это позволяет мне использовать дополнительные параметры в Stream.

Вот что я пытался сделать:

[OperationContract, WebInvoke(Method = "POST", UriTemplate = "UploadFile?username={username}&password={password}&filename={filename}")]
bool UploadFile(string username, string password, string filename, Stream fileContents);

Это просто дикое предположение, и я даже не уверен, имеет ли оно смысл. Служба WCF запускается просто отлично, но я еще не проверял ее. Таким образом можно использовать HTTP POST для URI?

Ответы [ 2 ]

1 голос
/ 06 сентября 2011

POST или GET, это не имеет значения, параметры все равно будут отображаться в URL, и вы определенно не хотите этого.WCF не поставляется с поддержкой отправки форм из коробки, но если вы измените свой метод, чтобы использовать только Stream, вы получите все тело POSTed в любом формате, в котором оно было в необработанных байтах, которое вы можете затем проанализировать самостоятельно.

Поскольку вы будете загружать как данные формы (application / x-Www-form-urlencoded), так и данные файла, это означает, что POST будет на самом деле MIME из нескольких частей (multipart / form-data).Предполагая только загрузку одного файла, вам просто нужно прочитать начало потока до первой границы, чтобы получить данные формы, которые вы можете легко разделить, и URL-адрес расшифрует значения.Затем пропустите границу, а остальная часть потока будет данными файла до закрывающей границы.

1 голос
/ 06 сентября 2011

URI всегда будет общедоступным, если вы не отправите его через HTTPS.

Вы можете зашифровать пароль на стороне клиента перед вызовом службы WCF и впоследствии расшифровать строку, но я предсказываю, что это может быть не идеально.

Обычно люди отправляют это в теле HTTP-запроса POST, поэтому оно не отображается в списке параметров.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...