Приложение выполняет некоторые функции управления файлами на веб-сервере IIS 10. В частности, он должен выполнить 5 задач над парой файлов, находящихся на веб-сервере, который является всего лишь хостом простого веб-сайта:
- проверить существование файла на веб-сервере
- загрузить файл с веб-сервера
- загрузить файл на веб-сервер
- переименовать файл на веб-сервере
- удалить файл на веб-сервере веб-сервер
Файлы на веб-сервере находятся в папке, для доступа к которой требуется имя пользователя и пароль. Я создал экземпляр HttpClient с обработчиком для установки безопасности, и мне нужно думать, что это правильно, иначе проверка существования и загрузка завершится неудачно.
Код: Выделить всё
public partial class MainPage : ContentPage
{
private HttpClient _client;
public MainPage()
{
InitializeComponent();
var handler = new HttpClientHandler()
{
Credentials = new NetworkCredential(WebUser.Text, WebPwd.Text)
};
_client = new HttpClient(handler, true)
{
BaseAddress = new Uri(WebFolder.Text),
};
}
}
Код: Выделить всё
private async Task UploadFile3(string localFile, string remoteFolder)
{
bool ret = false;
try
{
using (var multipartFormContent = new MultipartFormDataContent())
{
var fileStreamContent = new StreamContent(File.OpenRead(localFile));
fileStreamContent.Headers.ContentType = new MediaTypeHeaderValue("text/xml");
multipartFormContent.Add(fileStreamContent, "file", Path.GetFileName(localFile));
var response = await _client.PostAsync(remoteFolder, multipartFormContent);
ret = response.IsSuccessStatusCode;
Debug.Print("Upload " + (ret ? "SUCCESS" : "FAIL " + response.ReasonPhrase) +
"\nUpload of file " + localFile + " to " + remoteFolder + " = " + ret);
}
}
catch (Exception ex)
{
Debug.Print("UploadFile3 failed: " + ex.Message);
}
return ret;
}
Чтобы переименовать веб-файл, я:
Код: Выделить всё
private async Task RenameWebFile(string origName, string newName)
{
bool ret = false;
// Set the API endpoint
string apiUrl = origName + "/rename";
// Create the request body
var requestBody = new
{
newName = newName
};
// Serialize the request body to JSON
var json = Newtonsoft.Json.JsonConvert.SerializeObject(requestBody);
var content = new StringContent(json, Encoding.UTF8, "application/json");
// Send the request
HttpResponseMessage response = await _client.PostAsync(apiUrl, content);
// Check the response
if (response.IsSuccessStatusCode)
{
Debug.Print("File renamed successfully.");
ret = true;
}
else
{
Debug.Print($"Error renaming file: {response.StatusCode}");
}
return ret;
}
полными путями (http://www ...)
Наконец, для удаления у меня есть:
Код: Выделить всё
private async Task DeleteWebFile(string fileToDelete)
{
var msg = await _client.DeleteAsync(fileToDelete);
return = msg.IsSuccessStatusCode;
}
Может быть, на сервере что-то требуется? Для старого WebClient в этом не было необходимости, но...?
Я опытный (более 35 лет) инженер C/C#, но мой опыт далек от веб-технологий (очевидно!)... как я уже сказал, я динозавр, хотя и пытаюсь учиться.
Я был бы очень признателен за любую помощь - даже если это просто ссылка на полезный материал.>
Подробнее здесь: https://stackoverflow.com/questions/798 ... les-on-a-w
Мобильная версия