Веб-API C# работает локально, но не работает в Azure после публикации

Я получил ошибку ниже. Я пытаюсь реализовать загрузку WEB API на C#, который загружает большой двоичный объект в файл из хранилища Azure blob.

Я пробовал режим отладки в Visual Studio, но он не работает и возвращает ошибки при локальном тестировании, только получаю эту ошибку при развертывании. Я предполагаю, что это может быть путь к файлу, но я не знаю, если честно.

Internal Server Error 500.

[RoutePrefix("api/download")]
[EnableCors(origins: "*", headers: "*", methods: "*")]
public class DownloadController : ApiController
{
    private ggContext db = new ggContext();
    private const string Container = "ggblobcontainer";
    [HttpGet]
    public HttpResponseMessage GetFile(int audioid)
    {
        //get the object storing the audio 
        Someobject zzz = db.Meetings.Find(audioid);
        //get the filename from the object 
        string fileName = zzz.GetFileName();
        //account information from web.config 
        var accountName = ConfigurationManager.AppSettings["storage:account:name"];
        var accountKey = ConfigurationManager.AppSettings["storage:account:key"];
        var storageAccount = new CloudStorageAccount(new StorageCredentials(accountName, accountKey), true);
        //create blob client from account
        CloudBlobClient blobClient = storageAccount.CreateCloudBlobClient();
        //get the container with the blobs storing the audio
        CloudBlobContainer audioContainer = blobClient.GetContainerReference(Container);
        //get the specific blob with the filename from object
        CloudBlockBlob blockBlob = audioContainer.GetBlockBlobReference(fileName);
        //if the blob is null error response
        if (blockBlob == null)
        {
            return Request.CreateErrorResponse(HttpStatusCode.NotFound, "blob with the file name " + fileName + " does not exist in " + Container);
        }
        try
        {
            //cause audio storage name on azure has "" eg. "sick audio file - why is it wrong [LYRICS].mp3" with quotations
            string regexSearch = new string(Path.GetInvalidFileNameChars()) + new string(Path.GetInvalidPathChars());
            Regex r = new Regex(string.Format("[{0}]", Regex.Escape(regexSearch)));
            //replace illegal chars with nothing in case replace the . for .mp3 
            string CleanFileName = r.Replace(fileName, "");
            // download to desktop
            string path = Environment.GetFolderPath(Environment.SpecialFolder.Desktop);
            //change it to fileName not dragon little bits 
            string gg = Path.Combine(path, CleanFileName);
            blockBlob.DownloadToFile(gg, FileMode.Create);
        }
        catch (Exception e)
        {
            throw e;
        }
        return Request.CreateResponse(HttpStatusCode.OK, fileName + " was downloaded succesfully");
    }
}

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

Ajay2707 27.10.2018 09:56

Environment.GetFolderPath (Environment.SpecialFolder.Desktop) мне это кажется подозрительным. Попробуйте сопоставить путь с URL-адресом сервера.

Azaz ul Haq 27.10.2018 10:00

я опубликовал правильно, так как другие мои контроллеры работают, когда я тестирую другой веб-API

Calvin Ng 27.10.2018 10:02

Соответствующий код следует публиковать как часть вашего вопроса, а не как ссылку на внешний ресурс. Я исправил это для вас.

Llama 27.10.2018 10:05

И комментарий @Azaz, вероятно, точный диагноз.

Llama 27.10.2018 10:07

Environment.GetFolderPath (Environment.SpecialFolder.Desktop) ‌; я думал, что это то, куда я скачиваю?

Calvin Ng 27.10.2018 10:08

Пользователь, с которым работает ваше приложение в Azure, вряд ли предоставит вам доступ к рабочему столу.

Llama 27.10.2018 10:12

могу я получить пример, как исправить?

Calvin Ng 27.10.2018 10:47
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
2
8
139
1

Ответы 1

Как упоминалось выше, Environment.GetFolderPath (Environment.SpecialFolder.Desktop) не будет работать в серверной среде. Итак, вам нужно попробовать что-то вроде:

string gg = Path.Combine(Server.MapPath("~\SomeDirectoryName"), CleanFileName)

Надеюсь, это поможет.

Другие вопросы по теме