部署到 Azure 网站时 WebApi 不工作
Posted
技术标签:
【中文标题】部署到 Azure 网站时 WebApi 不工作【英文标题】:WebApi Not Working When Deployed to Azure Website 【发布时间】:2013-10-20 16:36:34 【问题描述】:我的 WebApi 在我的本地机器上完美运行,但是当发布到 Azure(天蓝色网站)时,我得到以下信息:
未找到与请求 URI 匹配的 HTTP 资源 'http://myazurewebsite.domain/Api/Zipcode/GetLatLong?zip5=23423'。
但在本地主机上它工作得很好。
http://localhost/Api/Zipcode/GetLatLong?zip5=20024
"Latitude":38.89,"Longitude":-77.03
我有一个修改过的 WebApi 路由:
public static class WebApiConfig
public static void Register(HttpConfiguration config)
config.Routes.MapHttpRoute(
name: "DefaultPublicApi",
routeTemplate: "Api/controller/action/id/format",
defaults: new id = RouteParameter.Optional, format = RouteParameter.Optional
);
ApiController 类:
using System.Net;
using System.Net.Http;
using System.Web.Http;
using Project.Geography.Services;
using Project.WebPublic.Filters;
namespace Project.WebPublic.Controllers.WebApi
public class ZipCodeController : ApiController
private readonly ZipCodeService _zipCodeService;
public ZipCodeController(ZipCodeService zipCodeService)
_zipCodeService = zipCodeService;
[HttpGet]
[TransactionFilter]
public HttpResponseMessage GetLatLong(string zip5)
if (zip5.Length != 5)
return Request.CreateResponse(HttpStatusCode.BadRequest, "Zip Code Length Not Equal to 5");
var zip = _zipCodeService.GetByZip5(zip5);
if (zip == null)
return Request.CreateResponse(HttpStatusCode.NotFound, "Could not find Zip Code in Database");
var latlong = new
Latitude = zip.Latitude,
Longitude = zip.Longitude
;
return Request.CreateResponse(HttpStatusCode.OK, latlong);
【问题讨论】:
部署为云服务时也能正常工作,但部署为网站时效果不佳。 从来没有想到这一点。开始了一个新项目,效果很好。 我想我会添加评论,因为我今天遇到了完全相同的问题。我终于找到了一个原因/解决方案:我最初创建了一个云服务项目,然后将 Web 角色(技术术语)从它中取出,以部署为一个独立的网站(更适合我的需要),但是在复制了 Web 角色之后对于一个单独的项目,我一直忽略的名为“WebRole.cs”的原始项目还剩下一个文件。其中的代码阻止了 WebApi 的启动。一旦我删除它并重新部署它就开始正常工作......这也是你的问题吗? 这实际上为我修复了它。非常感谢! 【参考方案1】:尝试如下添加路由
[HttpGet]
[TransactionFilter]
[Route("api/GetLatLong")]
public HttpResponseMessage GetLatLong(string zip5)
if (zip5.Length != 5)
return Request.CreateResponse(HttpStatusCode.BadRequest, "Zip Code Length Not Equal to 5");
var zip = _zipCodeService.GetByZip5(zip5);
if (zip == null)
return Request.CreateResponse(HttpStatusCode.NotFound, "Could not find Zip Code in Database");
var latlong = new
Latitude = zip.Latitude,
Longitude = zip.Longitude
;
return Request.CreateResponse(HttpStatusCode.OK, latlong);
然后你的路线配置如下
public static class WebApiConfig
/// <summary>
/// Register the http configuration for web API.
/// </summary>
/// <param name="config">The http configuration instances</param>
public static void Register(HttpConfiguration config)
config.MapHttpAttributeRoutes();
config.Routes.MapHttpRoute(
name: "DefaultApi",
routeTemplate: "api/controller/id",
defaults: new id = RouteParameter.Optional );
【讨论】:
以上是关于部署到 Azure 网站时 WebApi 不工作的主要内容,如果未能解决你的问题,请参考以下文章
在 Windows Azure 的何处部署 WebApi:作为网站还是作为云服务?
将 WebAPI 和 MVC 项目发布到同一个 Azure 网站?