我的一个控制器操作,一个在Ajax请求中被调用,正在向客户端返回一个URL,以便它可以进行重定向.我正在使用Url.RouteUrl(..)并且在我的单元测试期间由于Controller.Url参数未预先填充而失败.
我尝试了很多东西,其中包括尝试存根UrlHelper(失败),手动创建一个UrlHelper带有RequestContext存根HttpContextBase(在RouteCollection.GetUrlWithApplicationPath调用时失败)的存根.
我搜索了谷歌,但几乎没有发现这个问题.我Url.RouteUrl在Controller操作中使用了一些非常愚蠢的东西吗?有没有更简单的方法?
更糟糕的是,我希望能够在我的单元测试中测试返回的URL - 实际上我只是想知道它重定向到正确的路由,但是因为我正在返回一个URL而不是一个URL route,我想控制解析的URL(例如,通过使用stubbed RouteCollection) - 但我很乐意让我的测试通过开始.
我正在使用Owin和ASP.NET Identity来使用OAuth令牌来保护我的Web API方法.令牌子系统设置如下:
var oauthOptions = new OAuthAuthorizationServerOptions()
{
TokenEndpointPath = new PathString("/Token"),
Provider = new SimpleAuthorizationServerProvider(),
AccessTokenFormat = new TicketDataFormat(app.CreateDataProtector(typeof(OAuthAuthorizationServerMiddleware).Namespace, "Access_Token", "v1")),
RefreshTokenFormat = new TicketDataFormat(app.CreateDataProtector(typeof(OAuthAuthorizationServerMiddleware).Namespace, "Refresh_Token", "v1")),
AccessTokenProvider = new AuthenticationTokenProvider(),
RefreshTokenProvider = new AuthenticationTokenProvider(),
AccessTokenExpireTimeSpan = TimeSpan.FromDays(14),
AllowInsecureHttp = true
};
app.UseOAuthAuthorizationServer(oauthOptions);
app.UseOAuthBearerAuthentication(new OAuthBearerAuthenticationOptions());
Run Code Online (Sandbox Code Playgroud)
它适用于基于用户名/密码请求令牌然后使用这些令牌.但是,由于用户在访问呈现SPA的控制器时已经过身份验证,我想在我的视图中生成令牌并将其传递给Javascript代码,而不必再次在SPA中登录.
所以我的问题是:如何手动生成令牌,以便将其包含在SPA视图中?
我目前正在使用NHibernate作为我的数据访问层,使用Fluent NHibernate为我创建映射文件.我有两个类,TripItem和TripItemAttributeValue,它们之间有多对多的关系.
映射如下:
public class TripItemMap : ClassMap<TripItem2>
{
public TripItemMap()
{
WithTable("TripItemsInt");
NotLazyLoaded();
Id(x => x.ID).GeneratedBy.Identity().WithUnsavedValue(0);
Map(x => x.CreateDate, "CreatedOn").CanNotBeNull();
Map(x => x.ModifyDate, "LastModified").CanNotBeNull();
/* snip */
HasManyToMany<TripItemAttributeValue>(x => x.Attributes).AsBag()
.WithTableName("TripItems_TripItemAttributeValues_Link")
.WithParentKeyColumn("TripItemId")
.WithChildKeyColumn("TripItemAttributeValueId")
.LazyLoad();
}
}
public class TripItemAttributeValueMap : ClassMap<TripItemAttributeValue>
{
public TripItemAttributeValueMap()
{
WithTable("TripItemAttributeValues");
Id(x => x.Id).GeneratedBy.Identity();
Map(x => x.Name).CanNotBeNull();
HasManyToMany<TripItem2>(x => x.TripItems).AsBag()
.WithTableName("TripItems_TripItemAttributeValues_Link")
.WithParentKeyColumn("TripItemAttributeValueId")
.WithChildKeyColumn("TripItemId")
.LazyLoad();
}
}
Run Code Online (Sandbox Code Playgroud)
在我的应用程序中的某个时刻,我从数据库中获取现有属性,将它们添加到tripItem.Attributes,然后保存tripItem对象.最后,TripItems_TripItemAttributeValues_Link永远不会获得任何新记录,从而导致关系不被持久化.
如果有帮助,这些是Fluent NHibernate为这些类生成的映射文件:
<?xml version="1.0" encoding="utf-8"?>
<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2" default-lazy="true" assembly="ETP.Core" namespace="ETP.Core.Domain">
<class name="TripItem2" table="TripItemsInt" xmlns="urn:nhibernate-mapping-2.2" lazy="false">
<id name="ID" …Run Code Online (Sandbox Code Playgroud) 我想将我的构建中的输出文件复制到登台服务器,但我无法弄清楚如何找到TeamCity用于在MSBuild中存储构建输出的路径.有帮助吗?
谢谢!
.net ×1
asp.net-mvc ×1
c# ×1
msbuild ×1
nhibernate ×1
teamcity ×1
unit-testing ×1
urlhelper ×1