gpt4 book ai didi

c# - 路由到 WebApi 删除本地化

转载 作者:太空宇宙 更新时间:2023-11-03 13:36:06 25 4
gpt4 key购买 nike

非常感谢您帮助解决以下问题。我已经设置我的网站,使用 Alex Adamyan 的博客 Addition to ASP.NET MVC Localization - Using routing 中描述的方法将文化指示器添加到 route .除了一个异常(exception),它工作得很好。我的网站使用 WebApi Controller ,当我调用一个名为上传的操作时,请求被中止,没有其他错误。问题是在链接请求中,本地化路由在请求中预先附加了文化代码,以便 url 看起来像这样:

http://mysite/en/api/upload/021a6305-0e40-4a4a-a129-43c611aac371

对 api 的调用不应包含文化代码,并且应如下所示:

http://mysite/api/upload/021a6305-0e40-4a4a-a129-43c611aac371

我已尝试通过添加路线图并使用文章中描述的 SingleCultureRouteHandeler 来消除这种情况。

使用的路线图

routes.MapRoute(
"WebApi",
"api/{controller}/{id}",
new { controller = "Upload", id = UrlParameter.Optional }
).RouteHandler = new SingleCultureMvcRouteHandler();

我已经尝试过使用和不使用 Controller 的上述路线,但均未成功。

路由配置(以防遗漏)。

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using System.Web.Routing;
using Infrastructure.Routing;

namespace MySite.MVC
{
public class RouteConfig
{
public static void RegisterRoutes(RouteCollection routes)
{
routes.IgnoreRoute("{resource}.axd/{*pathInfo}");

routes.MapRoute(
"Default", // Route name
"{controller}/{action}/{id}", // URL with parameters
new { controller = "Home", action = "Index", id = UrlParameter.Optional } // Parameter defaults
);

routes.MapRoute(
"WebApi",
"api/{controller}/{id}",
new { id = UrlParameter.Optional }
).RouteHandler = new SingleCultureMvcRouteHandler();

foreach (Route r in routes)
{
if (!(r.RouteHandler is SingleCultureMvcRouteHandler))
{
r.RouteHandler = new MultiCultureMvcRouteHandler();
r.Url = "{culture}/" + r.Url;
//Adding default culture
if (r.Defaults == null)
{
r.Defaults = new RouteValueDictionary();
}
r.Defaults.Add("culture", Culture.en.ToString());

//Adding constraint for culture param
if (r.Constraints == null)
{
r.Constraints = new RouteValueDictionary();
}
r.Constraints.Add("culture", new CultureConstraint(Culture.en.ToString(), Culture.es.ToString(), Culture.mn.ToString()));
}
}

}

}
}

提前感谢您的帮助。

最佳答案

首先,使用不同的 URL 来本地化 API 不是一个好主意。
您应该改用 AcceptLanguage Header。本地化 URL 适用于网站,但不适用于 API。如果您想进一步深入,可以找到大量关于此的讨论。

routes.MapRoute(
"WebApi",
"api/{language}/{controller}/{id}",
new { controller = "Upload", id = UrlParameter.Optional }
).RouteHandler = new MultiCultureMvcRouteHandler();

但是关于您的路线:您没有在 route 定义文化部分。我认为永远使用语言的个人 Controller 可能有点矫枉过正,所以我会选择一个。

关于c# - 路由到 WebApi 删除本地化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18674859/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com