【发布时间】:2016-11-18 06:56:21
【问题描述】:
我使用 .net framework 4.0 和 web api 1。
我需要使用属性RoutePrefix,它在web api 2中。
第一个 web api 中有模拟吗?
在 Web API 2 中:
[RoutePrefix("api/file")]
public class FileController : ApiController
{
...
我的 API 控制器:
public class FileController : ApiController
{
private IFileManager fileManager;
public FileController()
: this(new LocalFileManager(HttpRuntime.AppDomainAppPath + @"\Album"))
{
}
public FileController(IFileManager fileManager)
{
this.fileManager = fileManager;
}
// GET: api/Photo
[HttpGet]
public async Task<HttpResponseMessage> Get()
{
var results = await fileManager.Get();
return Request.CreateResponse(HttpStatusCode.OK, new { photos = results });// (new { photos = results });
}
// POST: api/Photo
[HttpPost]
public async Task<HttpResponseMessage> Post()
{
// Check if the request contains multipart/form-data.
if (!Request.Content.IsMimeMultipartContent("form-data"))
{
return Request.CreateResponse(HttpStatusCode.BadRequest, "Unsupported media type");// BadRequest("Unsupported media type");
}
try
{
var photos = await fileManager.Add(Request);
return Request.CreateResponse(HttpStatusCode.OK, new { Message = "Photos uploaded ok", Photos = photos });// Ok(new { Message = "Photos uploaded ok", Photos = photos });
}
catch (Exception ex)
{
return Request.CreateResponse(HttpStatusCode.BadRequest, ex.GetBaseException().Message);// BadRequest(ex.GetBaseException().Message);
}
}
// DELETE: api/Photo/5
[HttpDelete]
[ActionName("{fileName}")]
public async Task<HttpResponseMessage> Delete(string fileName)
{
if (!this.fileManager.FileExists(fileName))
{
return Request.CreateResponse(HttpStatusCode.NotFound);// NotFound();
}
var result = await this.fileManager.Delete(fileName);
if (result.Successful)
{
return Request.CreateResponse(HttpStatusCode.OK, new { message = result.Message });// Ok(new { message = result.Message });
}
else
{
return Request.CreateResponse(HttpStatusCode.BadRequest, result.Message);// BadRequest(result.Message);
}
}
}
我的 WebApiConfig:
public static class WebApiConfig
{
//public static JsonSerializerSettings JsonSerializerSettings { get; private set; }
public static void Register(HttpConfiguration config)
{
config.Routes.MapHttpRoute(
name: "DefaultApi",
routeTemplate: "api/{controller}/{action}/{id}",
defaults: new { id = RouteParameter.Optional }
);
config.Routes.MapHttpRoute(
name: "FileApi",
routeTemplate: "api/file/{action}/{fileName}",
defaults: new { controller = "File", action = "Get", id = RouteParameter.Optional }
);
}
}
我的角度工厂:
function fileManagerClient($resource, $http) {
return $resource("api/file/:fileName",
{ fileName: "@fileName" },
{
'query': { method: 'GET' },
'save': { method: 'POST', transformRequest: angular.identity, headers: { 'Content-Type': undefined } },
'remove': { method: 'DELETE', url: 'api/file/:fileName', params: { name: '@fileName' } }
});
我需要改变什么来解决它?
【问题讨论】:
-
如您所知,路由前缀已添加到 web api 2。我相信有一些第三方项目最初试图做同样的事情,但你必须检查存储库。有没有办法升级到 web api 2
-
.net framework 4 与我所知道的 web api 2 不兼容。
-
在 webApiConfig 中我需要添加哪个路由才能通过 api/photo 获取 PhotoController?
-
基于通用约定的默认路由
api/{controller}应该可以工作。您仍然可以创建一个特定于照片控制器config.Routes.MapHttpRoute( name: "PhotoApi", routeTemplate: "api/photo/{id}", defaults: new { controller = "Photo", id = RouteParameter.Optional } );
标签: c# asp.net .net asp.net-web-api asp.net-web-api-routing