我目前正在开发一个需要从 API 控制器获取字符串的网站,以便它可以将其作为图像显示在页面上。当我在 Visual Studio 中运行站点时一切正常,但是当我将它发布到网站本身时,服务器总是响应以下内容:
<Error>
<Message>No HTTP resource was found that matches the request URI 'https://{website_name}/api/Files/GetProfilePicture?userId=cc6afd64-885e-4d8b-a239-42b161d665cc'.</Message>
<MessageDetail>No type was found that matches the controller named 'Files'.</MessageDetail>
</Error>
网站中的其他 Api 控制器工作正常,但特别是这个控制器很顽固。
这是 WebApiConfig.cs:
public static class WebApiConfig
{
public static void Register(HttpConfiguration config)
{
config.MapHttpAttributeRoutes();
config.Routes.MapHttpRoute(
name: "DefaultApi",
routeTemplate: "api/{controller}/{action}/{id}",
defaults: new { id = RouteParameter.Optional }
);
}
}
这是视图:
@model {website_name}.Models.ProfilePictureGetModel
@{
if (Model.userId == null)
{
Model.userId = Microsoft.AspNet.Identity.IdentityExtensions.GetUserId(User.Identity);
}
string style = "border-radius: " + Model.size + "px; height: " + Model.size + "px; width: " + Model.size + "px; object-fit: cover; cursor: pointer";
}
<body>
<img class="pflPic @Model.userId" style="@style" onclick="location.href = '/Profile?id=' + '@Model.userId'" />
@Scripts.Render("~/bundles/jquery")
<script type="text/javascript">
$.ajax({
url: "/api/Files/GetProfilePicture",
data: {
id: '@Model.userId'
},
type: "GET",
cache: true,
async: true,
success: function (result) {
if (result) {
var pics = document.getElementsByClassName("@Model.userId")
for (var i = 0; i < pics.length; i++) {
if (pics[i].src == "")
pics[i].src = result;
}
}
}
});
</script>
</body>
这是控制器:
namespace {website_name}.Controllers.Api
{
public class FilesController : ApiController
{
ApplicationDbContext _context;
[HttpGet]
[WebMethod]
[ResponseType(typeof(String))]
public IHttpActionResult GetProfilePicture(string userId)
{
var User = _context.Users.FirstOrDefault(x => x.Id == userId);
if (User == null)
return NotFound();
string img = Convert.ToBase64String(User.ProfilePicture);
if (User != null)
return Ok("data:image;base64," + img);
else
return NotFound();
}
protected override void Dispose(bool disposing)
{
_context.Dispose();
base.Dispose(disposing);
}
public FilesController()
{
_context = new ApplicationDbContext();
}
}
}