ASP.net WebAPI Post метод возвращает 405 при публикации - PullRequest
0 голосов
/ 10 мая 2018

Я создаю контроллер в своем веб-API, чтобы разрешить загрузку файлов, в частности, файлов .MP4, которые в конечном итоге будут опубликованы в моем приложении Unity3D. Но сейчас я не могу заставить его принимать какие-либо файлы, и я продолжаю получать 405 результатов.

Я использую код со страницы документации MS (https://docs.microsoft.com/en-us/aspnet/web-api/overview/advanced/sending-html-form-data-part-2) на самом деле ничего не изменило, кроме пути. Сначала просто пытаюсь заставить его работать локально на моей машине. Никаких точек останова не происходит отладка, так как это 405ing:

[HttpPost]
public async Task<HttpResponseMessage> Post()
{

    if (!Request.Content.IsMimeMultipartContent())
    {
        throw new HttpResponseException(HttpStatusCode.UnsupportedMediaType);
    }

    string root = HttpContext.Current.Server.MapPath("~/videos");
    var provider = new MultipartFormDataStreamProvider(root);

    try
    {
        // Read the form data.
        await Request.Content.ReadAsMultipartAsync(provider);

        // This illustrates how to get the file names.
        foreach (MultipartFileData file in provider.FileData)
        {
            Trace.WriteLine(file.Headers.ContentDisposition.FileName);
            Trace.WriteLine("Server file path: " + file.LocalFileName);
        }
        return Request.CreateResponse(HttpStatusCode.OK);
    }
    catch (System.Exception e)
    {
        return Request.CreateErrorResponse(HttpStatusCode.InternalServerError, e);
    }         
}

Вот system.webserver из моей конфигурации:

<system.webServer>
<modules>
  <remove name="WebDAVModule" />
</modules>
<handlers>
  <remove name="WebDAV" />
  <remove name="ExtensionlessUrlHandler-Integrated-4.0" />
  <remove name="OPTIONSVerbHandler" />
  <remove name="TRACEVerbHandler" />
  <add name="ResultHandler" path="*.mp4" verb="POST" type="FileUploadApplication.ResultHandler" resourceType="Unspecified" requireAccess="Script" preCondition="integratedMode" />
  <add name="ExtensionlessUrlHandler-Integrated-4.0" path="*." verb="*" type="System.Web.Handlers.TransferRequestHandler" preCondition="integratedMode,runtimeVersionv4.0" />
</handlers>
</system.webServer>

А вот с моего global.asax:

public class Global : System.Web.HttpApplication
{
    protected void Application_Start(object sender, EventArgs e)
    {
        GlobalConfiguration.Configuration.Routes.MapHttpRoute("Default", 
            "{controller}/{id}", 
            new { id = RouteParameter.Optional });
        MediaTypeFormatter());
        GlobalConfiguration.Configuration.Formatters.JsonFormatter.SerializerSettings.ReferenceLoopHandling = Newtonsoft.Json.ReferenceLoopHandling.Ignore;
    }
}

Заголовок запроса:

Content-Type: multipart/form-data; boundary=------------------------- 
acebdf13572468
Host: localhost:65056
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: en-us,en;q=0.5
Accept-Encoding: gzip, deflate
Content-Length: 383829

Есть ли что-то, что нужно изменить в другом месте? Как в IIS на сервере, чтобы разрешить загрузку определенных файлов? Ранее я создал простой метод Post для публикации изображений, и мне не нужно было делать ничего подобного.

Любая помощь очень ценится в этом!

Редактировать: Я украсил метод Post () с помощью [HttpPost], но он все еще не работал. Я также добавил заголовок запроса, который я использовал.

Также в заголовках ответа я получаю это:

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