我正在开发一个Web API,我想出的一个测试是,如果客户端使用物理测试ID进行GET操作(物理测试是我正在寻找的资源)并且找不到物理测试,Web API应返回404状态.
现在,我正在使用moq框架进行测试,我有以下代码:
[TestMethod]
public void then_if_physical_test_not_found_return_not_found_status()
{
var unitOfWork = new Mock<IUnitOfWork>();
var repository = new Mock<IRepository<PhysicalTest>>();
repository.Setup(r => r.FindById(It.IsAny<int>())).Returns();
unitOfWork.Setup(m => m.PhysicalTests).Returns(repository.Object);
var pt = new PhysicalTestResource(unitOfWork.Object);
HttpResponseMessage<PhysicalTest> response = pt.GetPhysicalTest(43);
Assert.AreEqual(HttpStatusCode.NotFound, response.StatusCode)
}
Run Code Online (Sandbox Code Playgroud)
我需要Returns()方法来返回一个null对象,如果找不到资源,它将是实际API方法返回的对象.
我尝试在Returns()方法中将null作为参数发送但没有成功.
我有一个DLL,我想添加它作为我的项目的参考,但每次我尝试这样做时会弹出一个对话框告诉我:
无法添加引用.请确保该文件是可访问的,并且它是有效的程序集或COM组件.
我已经研究了一点,发现错误是因为程序集不受.NET管理,我应该使用DLLImport属性,但是,我在另一台计算机上有完全相同的解决方案,而且everythig工作正常.
不同之处在于,我尝试添加引用的新计算机是x64,旧计算机是x86.
我有x64和x86 DLL,并且不能添加任何.为什么会这样?
我正在实施OAuth2提供程序,我希望在我的网站的某个地方开发人员登录并注册第三方应用程序.但我对如何生成应用程序的客户端标识符和客户端密钥有疑问.它们应该是唯一的随机代码,还是必须向客户提供一些有意义的信息?我想他们可能是随机的.
好吧,我一直在寻找有关如何做到这一点的最佳实践,但没有找到那么多.所以任何答案都将不胜感激.
PD:我在.NET MVC3上开发了一个名为DotNetOpenAuth的库.
我有一组托管WCF Web Api的服务,我需要做的是验证应用程序模型中的属性.
例如,在MVC 3中,我在模型中修饰属性,如下所示:
[StringLength(30)]
public string UserName { get; set; }
Run Code Online (Sandbox Code Playgroud)
然后在控制器中我这样继续验证模型是否满足验证参数:
[HttpPost]
ActionResult Create(Model myModel)
{
if(ModelState.IsValid(){
Post the model
}
else
{
Don't post the model
}
}
Run Code Online (Sandbox Code Playgroud)
有没有办法在WCF Web Api中做类似的事情?
我有一个不同项目的解决方案,一个是MVC 3项目,另一个是测试项目.
从测试项目中,我正在尝试测试我的控制器行为.但是当我运行测试时,系统会抛出一个错误告诉我:
System.IO.FileNotFoundException:无法加载文件或程序集'System.Web.Mvc,Version = 1.0.0.0,Culture = neutral,PublicKeyToken = 31bf3856ad364e35'或其依赖项之一.该系统找不到指定的文件.
警告:程序集绑定日志记录已关闭.要启用程序集绑定失败日志记录,请将注册表值[HKLM\Software\Microsoft\Fusion!EnableLog](DWORD)设置为1.
测试中的代码如下:
[TestMethod]
public void TestMethod()
{
var myService = new Mock<IMyService>();
myService.Setup(a => a.ReadAuthorizationRequest())
.Returns<EndUserAuthorizationRequest>(null);
int error = 0;
var controller = new myController(myService.Object);
try
{
var actionResult = controller.Authorize();
}
catch (HttpException exception)
{
error = exception.GetHttpCode();
}
Assert.AreEqual(403, error);
}
Run Code Online (Sandbox Code Playgroud)
控制器:
public class myController: Controller
{
private readonly IMyService _service;
public OAuthController(IMyService service)
{
_service = service;
}
[Authorize, AcceptVerbs(HttpVerbs.Get | HttpVerbs.Post)]
public ActionResult Authorize() …Run Code Online (Sandbox Code Playgroud) 目前我正在使用DotNetOpenAuth CTP版本开发OAuth2授权服务器.我的授权服务器在asp.net MVC3中,它基于库提供的示例.一切正常,直到应用程序达到用户授权消费者客户端的程度.
我的OAuth控制器中有一个操作,它负责授权过程,与示例中的等效操作非常相似:
[Authorize, HttpPost, ValidateAntiForgeryToken]
public ActionResult AuthorizeResponse(bool isApproved)
{
var pendingRequest = this.authorizationServer.ReadAuthorizationRequest();
if (pendingRequest == null)
{
throw new HttpException((int)HttpStatusCode.BadRequest, "Missing authorization request.");
}
IDirectedProtocolMessage response;
if (isApproved)
{
var client = MvcApplication.DataContext.Clients.First(c => c.ClientIdentifier == pendingRequest.ClientIdentifier);
client.ClientAuthorizations.Add(
new ClientAuthorization
{
Scope = OAuthUtilities.JoinScopes(pendingRequest.Scope),
User = MvcApplication.LoggedInUser,
CreatedOn = DateTime.UtcNow,
});
MvcApplication.DataContext.SaveChanges();
response = this.authorizationServer.PrepareApproveAuthorizationRequest(pendingRequest, User.Identity.Name);
}
else
{
response = this.authorizationServer.PrepareRejectAuthorizationRequest(pendingRequest);
}
return this.authorizationServer.Channel.PrepareResponse(response).AsActionResult();
}
Run Code Online (Sandbox Code Playgroud)
每次程序到达此行:
this.authorizationServer.Channel.PrepareResponse(response).AsActionResult();
Run Code Online (Sandbox Code Playgroud)
该系统引发了一个异常,我研究过但没有成功.例外情况如下:LINQ to Entities中仅支持无参数构造函数和初始值设定项.
堆栈跟踪:http://pastebin.com/TibCax2t
我与样本做的唯一不同的是我使用了实体框架的代码第一种方法,我认为样本是使用自动生成实体的设计器完成的. …
我想使用微服务架构开发一个应用程序.我是微服务的新手,直到现在我只使用monolithich方法.
我想做的是拥有一个负责用户身份验证的微服务,并使用Proxy APIS来授权请求.
IdentityServer4文档中很好地记录了在Proxy API中授权请求,但是,当代理api将请求传递给最终微服务时,如何授权此请求?
我知道如果我正确设置了最终微服务,代理api中使用的相同令牌可用于在最终微服务中授权请求.但是我该如何通过呢?我是否从Proxy API中的请求中获取令牌并将其传递给最终的微服务?这样做是一个好习惯吗?
或者是阻止最终微服务仅接收来自我的代理api的请求并且没有授权逻辑的更好的选择?
PD:我想使用asp.net-core
我一直在研究这个主题,还没有找到任何答案.我使用spring roo,我想知道是否有一种方式可以在这种关系中建立与属性的多对多关系.例如,我有两个表Employee和MedicalEquipment,员工可以预留许多设备,设备可以由许多员工预订,但是我想存储这个储备发生的日期.
如果有人可以帮助我会很感激.提前致谢!
我遇到的情况让asp.net web api变得烦人.问题是我有一个已经投入生产的API,但我不断进行更改和部署.
我有一个过滤器,它负责检查请求是否为https,在生产时效果很好,但是当请求是本地的时,过滤器会阻止所有http请求,这不是我想要的.我想用http允许本地请求.我有一个过滤器,它在MVC3上执行完全相同的操作,我可以执行以下操作:
filterContext.HttpContext.Request.IsLocal
Run Code Online (Sandbox Code Playgroud)
有没有解决这个问题的工作?
我正在编写一个角度控制器,它对数据服务有依赖性(数据服务转到http服务器),我想模仿它的行为.
我正在使用一个名为bard js的库进行模拟,它有一个名为bard.mockService的模拟服务api .
在beforeEach语句中,我正在做:
beforeEach(function() {
bard.appModule('app.process.creation');
bard.inject('$controller', '$rootScope', '$q', 'processCreationDataservice');
bard.mockService(processCreationDataservice, {
createProcess: $q.when({}),
_default: $q.when([])
});
controller = $controller('ProcessCreationController');
$rootScope.$apply();
});
Run Code Online (Sandbox Code Playgroud)
然后我的测试:
it('should call create process data service to create process', function() {
controller.create();
expect(processCreationDataservice.createProcess).to.have.been.calledOnce;
});
Run Code Online (Sandbox Code Playgroud)
正如您在测试中看到的那样,我想声明dataservice.createProcess被调用一次.
控制器没有调用方法processCreationDataservice.createProcess,仍然测试正在通过.
(function() {
angular
.module('app.process.creation')
.controller('ProcessCreationController', ProcessCreationController);
ProcessCreationController.$inject = ['processCreationDataservice'];
function ProcessCreationController(processCreationDataservice) {
var vm = this;
vm.process = {
name: '',
bankId: ''
};
vm.create = function() {
};
}})();
Run Code Online (Sandbox Code Playgroud)
我想知道为什么这个测试正在通过,我该怎么做才能断言该方法被调用一次.
我按照这些说明操作:https: //github.com/wardbell/bardjs#mockService
我正在Xamarin.IOS中编写一个应用程序,它有一个显示Google Maps MapView的控制器,我想在用户点击并保持地图中的任何一点时添加一个标记
到目前为止,我已经尝试将手势识别器添加到MapView对象,但它无法正常工作.这是我的地图控制器代码:
public async override void ViewDidLoad ()
{
base.ViewDidLoad ();
View.BackgroundColor = UIColor.White;
var geolocator = new Geolocator { DesiredAccuracy = 50 };
location = await geolocator.GetPositionAsync (10000);
var camera = CameraPosition.FromCamera (latitude: location.Latitude,
longitude: location.Longitude, zoom: 6);
mapView = MapView.FromCamera (RectangleF.Empty, camera);
mapView.MyLocationEnabled = true;
var longGesture = new UILongPressGestureRecognizer (LongPress);
longGesture.MinimumPressDuration = 2.0;
mapView.AddGestureRecognizer (longGesture);
mapView.StartRendering ();
View = mapView;
}
public override void ViewWillDisappear (bool animated)
{
mapView.StopRendering ();
base.ViewWillDisappear (animated);
}
[Export("LongPress")]
void …Run Code Online (Sandbox Code Playgroud) c# ×4
asp.net ×2
oauth-2.0 ×2
wcf-web-api ×2
.net ×1
angularjs ×1
asp.net-core ×1
asp.net-mvc ×1
bardjs ×1
c#-4.0 ×1
chai ×1
many-to-many ×1
mocha.js ×1
mocking ×1
moq ×1
relationship ×1
sinon ×1
spring-roo ×1
xamarin ×1
xamarin.ios ×1