Токены могут быть подходящим способом, но я еще не вникал в это. Но если вы хотите изменить ответ, вы можете использовать фильтры ответов.
Я использовал его, чтобы Минимизировать полученный HTML в этом модуле https://gallery.orchardproject.net/List/Modules/Orchard.Module.JadeX.HtmlMarkupMinifier
Вот код, который должен сделать трюк или, по крайней мере, дать вам идею.
using System.Globalization;
using System.IO;
using System.Text;
using System.Web.Mvc;
using Orchard;
using Orchard.Mvc.Filters;
using Orchard.UI.Admin;
public class TokenReplacementFilter : FilterProvider, IActionFilter
{
private readonly WorkContext _workContext;
public TokenReplacementFilter(IWorkContextAccessor workContextAccessor)
{
_workContext = workContextAccessor.GetContext();
}
public void OnActionExecuting(ActionExecutingContext filterContext) {
// Only apply the token replacement if logged in and not in the Orchard admin area
if (filterContext.HttpContext.Response.Filter == null || _workContext.CurrentUser == null || AdminFilter.IsApplied(filterContext.RequestContext))
return;
filterContext.HttpContext.Response.Filter = new TokenReplacementStream(filterContext.HttpContext.Response.Filter, filterContext.HttpContext.Response.Output.Encoding, _workContext);
}
public void OnActionExecuted(ActionExecutedContext filterContext)
{
}
}
internal class TokenReplacementStream : MemoryStream
{
private readonly Stream _stream;
private readonly Encoding _encoding;
private string _html;
private readonly WorkContext _workContext;
public TokenReplacementStream(Stream filter, Encoding encoding, WorkContext workContext)
{
_stream = filter;
_encoding = encoding;
_workContext = workContext;
}
public override void Write(byte[] buffer, int offset, int count)
{
_html += _encoding.GetString(buffer);
}
public override void Flush()
{
if (_html != null) {
_html = _html.Replace("[memberid]", _workContext.CurrentUser.Id.ToString(CultureInfo.InvariantCulture));
_stream.Write(_encoding.GetBytes(_html), 0, _encoding.GetByteCount(_html));
}
}
}
Спасибо за ваш ответ, просто учитывая это, но я получаю HttpException с бесполезным сообщением «Фильтрация не допускается». с кодом ошибки -2147467259. Тем не менее, он все еще попадает в код в методе Flush в фильтре. –
Данг, извините, что слышу это. Я добавил одну нулевую проверку в OnActionExecuting, не могли бы вы попробовать ее с этим? Также, если вы запускаете режим отладки, попробуйте отключить его, если это поможет. – Xeevis
Неверная проверка сделала трюк спасибо. Я также должен был не применять фильтр, если на админ-сайте, который заменял мои жетоны! Произошла ошибка компиляции из-за недоступности WorkContext в 1 области, я исправил это и внес несколько изменений названия, чтобы лучше соответствовать моему проекту. Я добавил редактирование, но он говорит, что он должен быть «проверен экспертом», как только это будет сделано. Я помечаю этот ответ как принятый. –