【发布时间】:2019-12-12 15:10:59
【问题描述】:
我目前正在学习 ASP.NET MVC,我的任务是创建一个用户可以上传文件的网站。
我已将以下 FileUploadingController 作为 API 编写,当我尝试通过我的网站视图中的表单调用时,我收到以下错误:'The controller for path '/api/FileUploading/UploadFile' was未找到或未实现 IController。'
这是我上传用户文件的 API。
public class FileUploadingController : ApiController
{
[HttpPost]
[Route("api/FileUploading/UploadFile")]
public async Task<string> UploadFile()
{
var ctx = HttpContext.Current;
var root = ctx.Server.MapPath("~/App_Data");
var provider =
new MultipartFormDataStreamProvider(root);
try
{
await Request.Content
.ReadAsMultipartAsync(provider);
foreach (var file in provider.FileData)
{
var name = file.Headers
.ContentDisposition
.FileName;
// remove double quotes from string.
name = name.Trim('"');
var localFileName = file.LocalFileName;
var filePath = Path.Combine(root, name);
File.Move(localFileName, filePath);
}
}
catch (Exception e)
{
return $"Error: {e.Message}";
}
return "File uploaded!";
}
}
这是我调用此 API 的表单。
<form
method ="post"
enctype="multipart/form-data"
action="https://localhost:44327/api/FileUploading/UploadFile"
>
<div>
<label for="img">Image File</label>
<input name="img" type="file"/>
</div>
<div>
<input type="submit" value="upload" />
</div>
</form>
虽然我知道这种方法不是最好的方法,并且已经与我的导师讨论了替代方法,但我们都无法弄清楚为什么会发生此错误(我确实理解错误的含义,但我很难过以及如何在不采取不同方法的情况下解决它),尽管我们没有寻找太久。
谢谢!
编辑:根据要求,这里是我的 WebApiConfig.cs 的内容
public static class WebApiConfig
{
public static void Register(HttpConfiguration config)
{
// Web API configuration and services
// Web API routes
config.MapHttpAttributeRoutes();
config.Routes.MapHttpRoute(
name: "DefaultApi",
routeTemplate: "api/{controller}/{id}",
defaults: new { id = RouteParameter.Optional }
);
}
}
【问题讨论】:
-
@可能是您尝试发布表单但您尝试点击的端点没有任何参数?例如 [FormBody]。 ASP.NET 可能不知道如何在您的控制器中路由到该操作。
-
你的路由应该是
"https://localhost:44327/FileUploading/api/FileUploading/UploadFile"你忘记了控制器名称 -
@Train 如果我按照您的建议输入路线,我会收到错误 404
-
@nickgowdy 我不确定我理解你的意思,请你澄清一下吗?
-
App_Start文件夹的WebApiConfig.cs文件里有什么代码?
标签: c# asp.net-mvc