我在使用UriPathExtensionMapping在ASP.NET WebAPI中工作時遇到問題。我的設置如下:UriPathExtensionMapping來控制WebAPI中的響應格式
我的路線是:
config.Routes.MapHttpRoute(
name: "Api UriPathExtension",
routeTemplate: "api/{controller}.{extension}/{id}",
defaults: new { id = RouteParameter.Optional }
);
config.Routes.MapHttpRoute(
name: "Api UriPathExtension ID",
routeTemplate: "api/{controller}/{id}.{extension}",
defaults: new { id = RouteParameter.Optional }
);
config.Routes.MapHttpRoute(
name: "DefaultApi",
routeTemplate: "api/{controller}/{id}",
defaults: new { id = RouteParameter.Optional }
);
我的全球ASAX文件是:
AreaRegistration.RegisterAllAreas();
WebApiConfig.Register(GlobalConfiguration.Configuration);
FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);
RouteConfig.RegisterRoutes(RouteTable.Routes);
BundleConfig.RegisterBundles(BundleTable.Bundles);
我的控制器是:
public IEnumerable<string> Get()
{
return new string[] { "Box", "Rectangle" };
}
// GET /api/values/5
public string Get(int id)
{
return "Box";
}
// POST /api/values
public void Post(string value)
{
}
// PUT /api/values/5
public void Put(int id, string value)
{
}
// DELETE /api/values/5
public void Delete(int id)
{
}
當使用curl發出請求,JSON是默認響應,即使當我明確請求XML時,我仍然得到JSON:
curl http://localhost/eco/api/products/5.xml
返回:
"http://www.google.com"
任何人都可以看到我的設置問題?
下面的代碼映射在Global.asax文件擴展名的路線已配置完成後:
GlobalConfiguration.Configuration.Formatters.JsonFormatter.
MediaTypeMappings.Add(
new UriPathExtensionMapping(
"json", "application/json"
)
);
GlobalConfiguration.Configuration.Formatters.XmlFormatter.
MediaTypeMappings.Add(
new UriPathExtensionMapping(
"xml", "application/xml"
)
);
感謝您的回覆,但是我已經有類似的代碼來設置擴展映射(更新了問題)。然而,我確實將代碼更改爲您的建議,但它仍然無效。 – markpirvine
@markpirvine - 好的謝謝澄清。看到我的更新,看看是否有幫助。 –
非常感謝您花時間再次查看代碼 - 我將表單'extension'更改爲'ext',並按預期工作。 – markpirvine