Я создаю контроллер в своем веб-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