Из того, что я вижу, ваш контроллер реализует контроллер Web API (то есть, используя ApiController.Request
), который имеет определение, как показано ниже:
public System.Net.Http.HttpRequestMessage Request { get; set; }
Тип возврата - HttpRequestMessage
, который не имеет свойства Files
, в отличие от предполагаемого HttpRequestBase
, который реализован как тип возврата Controller.Request
свойство ниже:
public System.Web.HttpRequestBase Request { get; }
Чтобы решить эту проблему, вам нужно наследовать от System.Web.Mvc.Controller
базового класса и переместить запросы Web API в другой класс, который наследует ApiController
, потому что вы не можете наследовать и System.Web.Mvc.Controller
, и System.Web.Http.ApiController
в одном классе:
namespace SimSentinel.Controllers
{
public class BulkSMSUploadController : Controller
{
[System.Web.Mvc.HttpPost]
public ActionResult UploadFiles()
{
if (Request.Files.Count <= 0)
{
return Json("No files selected.");
}
else
{
try
{
HttpFileCollectionBase files = Request.Files;
for (int i = 0; i < files.Count; i++)
{
string path = AppDomain.CurrentDomain.BaseDirectory + "Uploads/";
string filename = Path.GetFileName(Request.Files[i].FileName);
HttpPostedFileBase file = files[i];
string fname;
if (Request.Browser.Browser.ToUpper() == "IE" || Request.Browser.Browser.ToUpper() == "INTERNETEXPLORER")
{
string[] testfiles = file.FileName.Split(new char[] { '\\' });
fname = testfiles[testfiles.Length - 1];
}
else
{
fname = file.FileName;
}
fname = Path.Combine(Server.MapPath("~/Uploads/"), fname);
file.SaveAs(fname);
}
return Json("File Uploaded Successfully!");
}
catch (Exception ex)
{
return Json("Error occurred. Error details: " + ex.Message);
}
}
}
}
[System.Web.Http.Authorize]
public class BulkSMSUploadWebApiController : ApiController
{
public IHttpActionResult Index()
{
return null;
}
}
}
Если вы хотите загрузить файл с помощью контроллера Web API, вы должны использовать HttpResponseMessage
для получения сведений о файле с помощью MultipartFileData
, как указано в в этом примере (убедитесь, что вы проверяете по IsMimeMultipartContent
первый).