Мне нужна загрузка междоменных изображений с использованием веб-API ASP.NET и AJAX. Я новичок в этом подходе.Проблема с загрузкой файла с использованием доменного имени с использованием CORS - веб-API ASP.NET и jQuery
HTML
<!DOCTYPE html>
<html>
<head>
<title></title>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.3/jquery.min.js"></script>
<meta charset="utf-8" />
</head>
<body>
<form method="post" enctype="multipart/form-data">
<input type="file" id="fileUpload" />
<input type="submit" value="Upload CORS image" id="btnUpload" />
</form>
<div id="response"><!-- AJAX Response --></div>
<script type="text/javascript">
//55622
jQuery.support.cors = true;
function uploadFile() {
var fa = new FormData();
fa.append("upload_pass", document.getElementById("fileUpload").files[0]);
$.ajax({
type: "POST",
url: "http://localhost:5000/api/upload/imagefile",
data: fa,
contentType: false,
processData: false,
//dataType: "jsonp",
crossDomain: true,
success: function (data) {
// do something here.
}
});
}
$(document).ready(function() {
$("#btnUpload").bind("click", function() {
uploadFile();
});
});
</script>
</body>
</html>
API Метод контроллера
using Microsoft.AspNet.Cors;
using Microsoft.AspNet.Mvc;
namespace WebApiz.Controllers
{
[Route("api/[controller]")]
public class UploadController : Controller
{
[EnableCors("AllowAll")]
[Route("imagefile")]
[HttpPost("imagefile")]
public string ImageFile(object data)
{
return data.ToString();
}
}
}
У меня есть другие методы контроллера, которые прекрасно работают с [EnableCors("AllowAll")]
, но это один дает мне следующее сообщение об ошибке:
HTTP Error 405.0 - Method Not Allowed The page you are looking for cannot be displayed because an invalid method (HTTP verb) is being used.
Я совершенно не знаю, как решить эту проблему! Я упомянул this и this. Но, честно говоря, я не понял ясно. Если кто-нибудь, пожалуйста, помогите мне с тем, что я делаю неправильно, и что мне нужно сделать, чтобы выполнить это, что обеспечило бы жизнь для меня!
Заранее спасибо.
Спасибо за быстрый ответ.Я использовал '[EnableCors (origins:« http: // localhost: 5000 », заголовки:« * », методы:« get, post »)]', но он говорит: «лучшая перегрузка для EnableCorsAttribute не имеет параметра с именем originins '. Кроме того, в моих других методах контроллера, позволяющих CORS с помощью [[EnableCors («AllowAll»)] работает отлично. Мне не нужно было его параметризировать нигде. В 'Startup.cs' я настроил Cors уже таким образом:' public void Configure (приложение IApplicationBuilder, IHostingEnvironment env, ILoggerFactory loggerFactory) {app.UseCors ("AllowAll"); } 'Мне все еще нужно добавлять записи в web.config? –
'services.AddCors (options => options.AddPolicy (" AllowAll ", p => p.AllowAnyOrigin(). AllowAnyMethod(). AllowAnyHeader()));' Так я установил Cors внутри 1Startup.cs> ConfigureServices', который сообщает системе разрешить все происхождение, все методы и AllHeaders. Итак, почему я должен параметризовать '[EnableCors]' на уровне метода внутри контроллера или на уровне 'web.config'/s? На самом деле другие методы с помощью только '[EnableCors (« AllowAll »)] работают отлично. Однако ни один из них не загружает ничего на сервер. –
Это зависит от того, вы можете включить CORS для всех методов, чтобы вы могли использовать web.config или включить его при запуске, но если вы хотите включить его только для определенного метода, вам нужно включить его для каждого контроллера/за действие с атрибутами , – esiprogrammer