Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >如何拦截请求以获取用于站点本地化的原始URL?

如何拦截请求以获取用于站点本地化的原始URL?
EN

Stack Overflow用户
提问于 2017-12-08 17:36:54
回答 1查看 283关注 0票数 0

我的网站是这样运作的:

  1. 所有内容都有用于{区域性/片段}URL的自动命令。
  2. 用户可以选择网站文化,这样一切都以他们所选择的语言呈现。

我试图实现这个功能:

  1. 用户选择英文网站。
  2. 用户转到"site.com/es/ content ",这是西班牙语的一个内容。
  3. 网站必须自动将区域性更改为西班牙语,并返回所请求的内容。

我认为我需要的是拦截请求,解析URL并获取区域性,看看它是否与当前的相同。

我尝试过使用ItemsController在Orchard.Core.Contents中使用IHttpContextAccessor,但它没有原始Url。

我还尝试在Orchard.Autoroute和Orchard.Alias服务中捕获请求,但它们不是处理请求的服务。

如有任何指示,将不胜感激。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-01-11 03:33:42

有一些方法可以做到这一点。

实现ICultureSelector

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
namespace SomeModule
{
    using System;
    using System.Globalization;
    using System.Linq;
    using System.Web;
    using Orchard.Localization.Services;

    public class CultureSelectorByHeader : ICultureSelector
    {
        private readonly ICultureManager cultureManager;

        public CultureSelectorByHeader(ICultureManager cultureManager)
        {
            this.cultureManager = cultureManager;
        }

        public CultureSelectorResult GetCulture(HttpContextBase context)
        {
            var acceptedLanguageHeader = context?.Request?.UserLanguages?.FirstOrDefault();
            if ( acceptedLanguageHeader == null )
                return null;

            var enabledCultures = this.cultureManager.ListCultures();
            var siteCulture = this.cultureManager.GetSiteCulture();

            // Select the specified culture if it's enabled.
            // Otherwise, or if it wasn't found, fall back to the default site culture.
            var culture = enabledCultures.Contains(acceptedLanguageHeader, StringComparer.InvariantCultureIgnoreCase)
                ? CultureInfo.CreateSpecificCulture(acceptedLanguageHeader).Name
                : CultureInfo.CreateSpecificCulture(siteCulture).Name;

            return new CultureSelectorResult { CultureName = culture, Priority = 0 };
        }
    }
}

您可以在GetCulture中疯狂阅读标题、cookie、查询字符串,或者从DB获取当前用户的一些设置。任何适合你需要的东西。

直接设置文化

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
private void SetWorkContextCulture(string cultureTwoLetterIsoCode)
{
    if ( !string.IsNullOrWhitespace(cultureTwoLetterIsoCode) )
    {
        try
        {
            var culture = CultureInfo.CreateSpecificCulture(cultureTwoLetterIsoCode);
            this.Services.WorkContext.CurrentCulture = culture.TwoLetterISOLanguageName;
        }
        catch ( CultureNotFoundException )
        {
            Debug.WriteLine("Couldn't change thread culture.");
        }
    }
}

在返回结果之前,只需更改WorkContext的当前文化就可以了。

有趣的事实:在控制器中更改WorkContext.Culture将覆盖您在ICultureSelector实现中所做的一切。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/47724461

复制
相关文章
java 拦截器 判断url_Spring 的拦截器如何实现url转发
如何实现Spring 的过滤器代码中改写请求的URL,并转发出去,注意,是转发,不是重定向
全栈程序员站长
2022/09/27
1.5K0
ASP.NET Core获取请求完整的Url
由于.NET Core相关接口重构,现在无法在项目中直接获取当前请求的完整的Url地址了,需要我们自己把Microsoft.AspNetCore.Http命名空间下类名为HttpRequest的相关方法拼接获取,如下所示。
追逐时光者
2021/02/25
7.9K1
ASP.NET Core获取请求完整的Url
内网穿透是不是都无法获取原始请求IP
内网穿透是一种将本地网络服务暴露在公共网络上的技术,使外部网络可以访问本地服务。通常情况下,当外部网络通过内网穿透工具访问本地服务时,内网服务器只能看到内网穿透工具的IP地址,无法直接获取原始访问IP。除了神卓互联的IBCS虚拟专线可以直接获取原始请求IP,IBCS虚拟专线是基于二层网络架构的,所以可以获取原始请求IP。(防止误解说明:
用户5997228
2023/05/30
7730
内网穿透是不是都无法获取原始请求IP
如何防止请求的URL被篡改
如图,是我们模拟的一个从浏览器发送给服务器端的转账请求。久一的ID是 web_resource,正在操作100元的转账。
用户1093975
2018/12/05
3K0
Django如何处理URL请求
视图函数是一个用来接收浏览器请求(HttpRequest)对象并通过HttpRequest对象返回响应函数。此函数可以接收浏览器请求并根据业务逻辑返回相应的内容.
Yuou
2022/09/26
1.8K0
ThreadPoolExecutor获取原始异常
ThreadPoolTaskExecutor是Spring框架提供的一个线程池实现,它是基于Java的ThreadPoolExecutor实现的。ThreadPoolTaskExecutor可以管理线程池中的线程,以满足多线程并发执行任务的需要。
关忆北.
2023/10/11
2210
ThreadPoolExecutor获取原始异常
请求拦截详解
不可操作数据 | 执行方法相关信息 | ResponseBody的返回结果 | http请求信息
派大星在吗
2021/12/06
2.2K0
FastApi请求拦截
我们经常听说请求拦截,那到底什么是请求拦截,请求拦截有什么用呢?今天我们就一起来看一看。
Python研究所
2022/06/17
2.6K0
FastApi请求拦截
如何使用 Go 语言获取 URL?
在 Web 开发和网络爬虫等领域,经常需要获取和处理 URL(统一资源定位符)。Go 语言提供了丰富的标准库来处理 URL,使得获取和解析 URL 变得简单而高效。本文将介绍如何使用 Go 语言获取 URL 的详细步骤,并提供一些实用的示例。
网络技术联盟站
2023/07/03
7810
如何使用 Go 语言获取 URL?
Angular 中的请求拦截
在上一篇的文章 Angular 中使用 Api 代理,我们处理了本地联调接口的问题,使用了代理。
Jimmy_is_jimmy
2022/04/15
2.4K0
Angular 中的请求拦截
java web 获取到当前用户请求的完整url,包括参数
String url = request.getScheme() + "://" + request.getServerName() +
前Thoughtworks-杨焱
2021/12/08
1K0
Springmvc拦截器拦截Ajax请求
文章目录 1. 拦截器拦截Ajax请求 1.1. 原因 1.2. 解决 1.3. 第一种 拦截器拦截Ajax请求 ## 问题 如果我们在拦截器中定义了拦截器的路径为/user/*这个地址,并且拦截器拦截器之后,如果没有登录,那么重定向到登录界面。但是我们在未登录的前提下使用Ajax异步请求了/user/addUser.do这个地址,出现了拦截器是拦截了,但是并没有重定向到登录界面。 原因 可以参照这篇文章 :http://www.cnblogs.com/dudu/p/ajax_302_found.htm
爱撒谎的男孩
2019/12/31
1.9K0
Spring Boot 请求拦截
在面向对象编程的过程中,我们很容易通过继承、多态来解决纵向扩展。但是对于横向的功能,比如,在所有的 service 方法中开启事务,或者统一记录日志等功能,面向对象的是无法解决的。所以 AOP 其实是面向对象编程思想的一个补充。而过滤器和拦截器都属于面向切面编程的具体实现。
数媒派
2022/12/01
2K0
WPF获取原始控件样式。
要获取WPF控件的原始样式,需要我们安装Blend for Visual Studio。
Kiba518
2018/12/04
1.3K0
WPF获取原始控件样式。
Spring security 拦截请求
比如说在未登录淘宝时,我们可以访问淘宝的首页,可是在访问购物车时就会跳出登录权限。
Tim在路上
2020/08/04
2.3K0
vue请求拦截案例
import axios from 'axios'; import {getToken} from '@/utils/token' import { Message } from 'element-ui' axios.defaults.baseURL = 'http://127.0.0.1:8080/api/'; //请求拦截器 axios.interceptors.request.use(function(config){ //在发送请求前 config.headers['token']
IT工作者
2022/05/10
4560
GetFaviconAPI(获取站点Favicon)
image.png 几乎每个网站都会有一个favicon图片,就是显示在浏览器标题栏上面的小图标,当打开网页或将网页加入收藏时都会显示这个图标 而对于WEB设计或站长来说,可能会希望把某个网站的图标加入到站点名字或链接的前面以为页面增添色彩,同时增加链接的可读性和易用性 这个接口便是为此功能而生的,通过一种简单、稳定的方式获取网站的Favicon图标 ---- 优点/特性 调用方便,通过GET方式调用,并且同时支持HTTP/HTTPS协议 服务器使用Memcached缓存,针对已访问过的图标加载速度更快
FHYC
2018/06/22
1.4K0
点击加载更多

相似问题

URL重写以替换原始站点的URL

21

如何从请求中获取原始url

10

如何获取Firebase函数请求的原始URL?

20

拦截URL以获取验证码?

24

如何在shiro中获取原始请求URL

11
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文