Asp.net core .net核心中的Urlhelper和IActionContextAccessor
我有一些.net framework 4.5代码要转换为.net core:Asp.net core .net核心中的Urlhelper和IActionContextAccessor,asp.net-core,urlhelper,Asp.net Core,Urlhelper,我有一些.net framework 4.5代码要转换为.net core: [DataContract] public class RouteData { public RouteData() { Request = new RequestRouteData(); } [DataMember] public RequestRouteData Request { get; set; }
[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
bu,但我正在努力获得相应的方法来实现这一点
以下是我迄今为止所做的尝试:
[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中相同的结果…。您还需要注入IUrlHelperFactory
。然后:
UrlHelper = urlHelperFactory.GetUrlHelper(actionContext.ActionContext);
差不多。您还需要注入
IUrlHelperFactory
。然后:
UrlHelper = urlHelperFactory.GetUrlHelper(actionContext.ActionContext);
好的,那么我可能已经找到了这样做的方法。如果有人能证实我做得对,我将不胜感激:) 在
Startup.cs
中,我添加了:
services.AddScoped(sp => {
var actionContext = sp.GetRequiredService<IActionContextAccessor>().ActionContext;
var urlHelperFactory = sp.GetRequiredService<IUrlHelperFactory>();
return urlHelperFactory.GetUrlHelper(actionContext);
});
以及Javascriptdata()
最终目标是在应用程序开始时生成json,前端开发团队可以在ajax等中使用json。。这是他们曾经拥有的东西,我正在尝试转换到.NETCore
以下是一个例子:
好的,我可能已经找到了这样做的方法。如果有人能证实我做得对,我将不胜感激:) 在
Startup.cs
中,我添加了:
services.AddScoped(sp => {
var actionContext = sp.GetRequiredService<IActionContextAccessor>().ActionContext;
var urlHelperFactory = sp.GetRequiredService<IUrlHelperFactory>();
return urlHelperFactory.GetUrlHelper(actionContext);
});
以及Javascriptdata()
最终目标是在应用程序开始时生成json,前端开发团队可以在ajax等中使用json。。这是他们曾经拥有的东西,我正在尝试转换到.NETCore
以下是一个例子:
首先,谢谢你抽出时间,克里斯。正如您所提到的,我修改了代码以注入
IUrlHelperFactory
。不过,我不知道如何获得与旧的UrlHelper.Action(“AddOtherFields”,“Request”)等价的代码代码>。有什么线索吗?一旦你有了UrlHelper实例,问题是UrlHelper实例似乎总是null
你最终是如何使用它的?您必须在请求管道内,否则ActionContext
将为空。如果您希望能够在请求之外生成URL,这在技术上是不可能的。2.1中有LinkGenerator
,但目前它的功能非常有限。哦,这可能就是为什么它总是为空的原因。我刚刚在第二篇文章中添加了一个印刷品,说明了公司使用的原始代码,我正试图将其转换为.net Core。首先,感谢您的时间,Chris。正如您所提到的,我修改了代码以注入IUrlHelperFactory
。不过,我不知道如何获得与旧的UrlHelper.Action(“AddOtherFields”,“Request”)等价的代码代码>。有什么线索吗?一旦你有了UrlHelper实例,问题是UrlHelper实例似乎总是null
你最终是如何使用它的?您必须在请求管道内,否则ActionContext
将为空。如果您希望能够在请求之外生成URL,这在技术上是不可能的。2.1中有LinkGenerator
,但目前它的功能非常有限。哦,这可能就是为什么它总是为空的原因。我刚刚在第二篇文章中添加了一个打印,该公司使用了我试图转换到.net coreWell的原始代码,我认为这很好,但我在构建时不断遇到这个错误:RouteData.cs(20,50):[CS1003]语法错误,','expected
位于公共类RequestRoutedData:BaseRoutedData(){…}
您希望如何与RoutedData一起使用?与我们分享相关的代码,你需要定义一个构造函数,它接受RequestRouteData
的IUrlHelper
,并在公共类RequestRouteData:BaseRouteData()
@tazhou中删除()
,很抱歉没有提前给出答案,刚刚被流感困在家里。我更新了原来的帖子,所以你可以看到它将在哪里使用。我们的目标是创建路由并序列化它们,以创建可供前端开发团队访问的json。@TaoZhou但如果我为RequestRoutedata()创建一个接受IUrlHelper的构造函数,我也必须将IUrlHelper注入RouteData()构造函数,对吗?然后在我的JavascriptData()构造函数中。。。?刚刚编辑了上面的帖子来分享这一进步……好吧,我认为这很好,但我在构建时不断遇到这个错误:RouteData.cs(20,50):[CS1003]语法错误,“应该位于公共类RequestRouteData:BaseRouteData(){…}
您想如何使用RouteData
?与我们分享相关的代码,你需要定义一个构造函数,它接受RequestRouteData
的IUrlHelper
,并在公共类RequestRouteData:BaseRouteData()
@tazhou中删除()
,很抱歉没有提前给出答案,刚刚被流感困在家里。我更新了原来的帖子,所以你可以看到它将在哪里使用。我们的目标是创建路由并序列化它们,以创建可供前端开发团队访问的json。@TaoZhou但如果我为RequestRoutedata()创建一个接受IUrlHelper的构造函数,我也必须将IUrlHelper注入RouteData()构造函数,对吗?然后在我的JavascriptData()构造函数中。。。?刚刚编辑了上面的帖子来分享进步。。。