我有一些想转置到.net核心的.net Framework4.5代码:
[DataContract]
public class RouteData
{
public RouteData()
{
Request = new RequestRouteData();
}
[DataMember] public RequestRouteData Request { get; set; }
}
public class RequestRouteData : BaseRouteData
{
[DataMember]
public string AddUploadOtherFileStep5
{
get { return UrlHelper.Action("AddOtherFields", "Request"); }
}
}
public class BaseRouteData
{
protected UrlHelper UrlHelper { get; set; }
protected BaseRouteData()
{
UrlHelper = new UrlHelper(HttpContext.Current.Request.RequestContext);
}
}所以,我发现要获得当前的上下文,我必须使用IActionContextAccessor,但我很难获得相同的方法来这样做。
这是我到目前为止尝试过的:
[DataContract]
public class RouteData
{
public RouteData()
{
Request = new RequestRouteData();
}
[DataMember] public RequestRouteData Request { get; set; }
}
public class RequestRouteData : BaseRouteData()
{
[DataMember] public string AddOtherFields => UrlHelper.Action(What to put here?);
}
public class BaseRouteData
{
protected UrlHelper UrlHelper { get; }
protected BaseRouteData(IActionContextAccessor actionContext, IUrlHelperFactory urlHelperFactory)
{
UrlHelper = (UrlHelper) urlHelperFactory.GetUrlHelper(actionContext.ActionContext);
}
}编辑3:
public class JavascriptData
{
public JavascriptData()
{
Routes = new RouteData();
}
[DataMember] public RouteData Routes { get; set; }
#region ScriptFactory
public static string ScriptFactory()
{
var serializerSettings = new JsonSerializerSettings();
serializerSettings.ContractResolver = new CamelCasePropertyNamesContractResolver();
var script = new StringBuilder();
JavascriptData appData = new JavascriptData();
var text = JsonConvert.SerializeObject(appData, Formatting.Indented, serializerSettings);
script.AppendFormat("var appData={0}", text);
return script.ToString();
}
#endregion
}我走对了吗?因为我不知道如何使用UrlHelper.Action()方法来获得与.net 4.5中相同的结果……
发布于 2019-03-06 04:32:09
差不多了。您还需要注入IUrlHelperFactory。然后:
UrlHelper = urlHelperFactory.GetUrlHelper(actionContext.ActionContext);发布于 2019-03-06 05:12:13
好的,所以我可能已经找到了方法。如果有人能确认我做得对,我将不胜感激:)
在Startup.cs中,我添加了:
services.AddScoped(sp => {
var actionContext = sp.GetRequiredService<IActionContextAccessor>().ActionContext;
var urlHelperFactory = sp.GetRequiredService<IUrlHelperFactory>();
return urlHelperFactory.GetUrlHelper(actionContext);
});然后我的RouteData.cs就变成了:
[DataContract]
public class RouteData
{
public RouteData(IUrlHelper iUrlHelper)
{
Request = new RequestRouteData(iUrlHelper);
}
[DataMember] public RequestRouteData Request { get; set; }
}
public class RequestRouteData : BaseRouteData
{
public RequestRouteData(IUrlHelper iUrlHelper) : base(iUrlHelper)
{
}
[DataMember]
public string AddOtherFields => UrlHelper.Action("AddOtherFields", "Request");
}
public class BaseRouteData
{
protected UrlHelper UrlHelper { get; }
protected BaseRouteData(IUrlHelper iUrlHelper)
{
UrlHelper = iUrlHelper as UrlHelper;
}
}和Javascriptdata():
[DataContract]
public class JavascriptData
{
private static IUrlHelper _iUrlHelper;
public JavascriptData(IUrlHelper iUrlHelper)
{
_iUrlHelper = iUrlHelper;
Routes = new RouteData(_iUrlHelper);
}
[DataMember] public RouteData Routes { get; set; }
#region ScriptFactory
public static string ScriptFactory()
{
var serializerSettings = new JsonSerializerSettings();
serializerSettings.ContractResolver = new CamelCasePropertyNamesContractResolver();
var script = new StringBuilder();
JavascriptData appData = new JavascriptData(_iUrlHelper);
var text = JsonConvert.SerializeObject(appData, Formatting.Indented, serializerSettings);
script.AppendFormat("var appData={0}", text);
return script.ToString();
}
#endregion
}最终目标是在应用程序开始时生成一个json,供前端开发团队在ajax等应用程序中使用。这是他们曾经拥有的东西,我正在尝试转置到.net核心。
下面是一个示例:

https://stackoverflow.com/questions/55011025
复制相似问题