我曾经将我的控制器放在Mvc Web Api中的一个单独的类库项目中.我曾经在我的web api项目的global.asax中添加以下行来查找单独项目中的控制器:
ControllerBuilder.Current.DefaultNamespaces.Add("MyClassLibraryProject.Controllers");
Run Code Online (Sandbox Code Playgroud)
除了添加上面的行之外,我从来没有做过任何其他配置.这对我来说一直很好.
但是我无法使用上述方法在WebApi2中执行相同的操作.它只是不起作用.WebApi2项目仍尝试在其自己项目的controllers文件夹中查找控制器.
- 2个月后给予一点摘要更新(因为我开始对此表示赏心悦目):
我创建了一个WebApiOne解决方案,它有2个项目,第一个是WebApi项目,第二个是控制器的类库.如果我将对控制器类库项目的引用添加到WebApi项目中,则所有内容都按预期工作.即如果我去http://mydevdomain.com/api/values我可以看到正确的输出.
我现在创建了一个名为WebApiTwo的第二个项目,它有2个项目,第一个是WebApi2项目,第二个是控制器的类库.如果我将对控制器类库项目的引用添加到WebApi2项目,它将无法按预期工作.即如果我去http://mydevdomain.com/api/values我得到"没有找到匹配名为'值'的控制器的类型."
对于第一个项目,我根本没有做任何自定义设置,我没有:
ControllerBuilder.Current.DefaultNamespaces.Add("MyClassLibraryProject.Controllers");
Run Code Online (Sandbox Code Playgroud)
在我的global.asax中,我没有在他的两篇博文中实现StrathWeb提出的任何自定义解决方案,因为我认为它不再适用; 因为所有工作只是通过将控制器项目的引用添加到WebApi项目.
所以我希望所有人都能为WebApi2工作......但事实并非如此.有没有人真的尝试在WebAPi2中这样做?
如何禁用EF中的代码优先功能(Visual Studio 2012)
我正在使用Visual Studio 2012,MVC4(Internet应用程序模板).
我想使用EF,但不使用其代码优先功能.我希望应用程序出错,而不是根据我的代码创建或修改我的数据库.(我只是不能忍受我的数据库在幕后被改变的感觉...我希望应用程序使用我创建的确切数据库...如果有任何必须更改的东西,我会自己动手)
这是新的Ef(VS2012)的可能吗?
我见过很多人问这个,但到目前为止我无法找到答案.
entity-framework ef-code-first asp.net-mvc-4 visual-studio-2012
正如标题所述,我正在寻找任何快速简便的替代方案来实现像'Facebook Activity Feed'插件.
Facebook拥有的那个现在已于2015年6月23日被弃用.
https://developers.facebook.com/docs/plugins/activity
我相信Facebook会提供一些快速的选择,或者必须有一些类似的插件.不想花很多时间使用新的Graph API创建自己的.
我正在尝试模拟我正在测试的类,以便在测试它们时可以调用各个方法的基础.这将允许我仅将方法设置测试为callbase,并且将模拟在测试方法中调用的所有其他方法(同一类).
但是,我无法为不返回值的方法执行此操作.对于不返回值的方法,intellisense不显示callbase的选项.
这可能吗?
服务类:
public class Service
{
public Service()
{
}
public virtual void StartProcess()
{
//do some work
string ref = GetReference(id);
//do more work
SendReport();
}
public virtual string GetReference(int id)
{
//...
}
public virtual void SendReport()
{
//...
}
}
Run Code Online (Sandbox Code Playgroud)
测试类设置:
var fakeService = new Mock<Service>();
fakeService.Setup(x => x.StartProcess());
fakeService.Setup(x => x.GetReference(It.IsAny<int>())).Returns(string.Empty);
fakeService.Setup(x => SendReport());
fakeService.CallBase = true;
Run Code Online (Sandbox Code Playgroud)
现在在我测试GetReference的测试方法中,我可以这样做:
fakeService.Setup(x => x.GetReference(It.IsAny<int>())).CallBase();
Run Code Online (Sandbox Code Playgroud)
但是当我想为StartProcess做同样的事情时,.CallBase就不存在了:
fakeService.Setup(x => x.StartProcess()).CallBase();
Run Code Online (Sandbox Code Playgroud)
一旦我使方法返回一些东西,这样一个布尔值,它就变得可用.
我正在尝试使用隐式流通过 Azure Ad 保护我的 Web api (.net core 2.2)。
我使用 Azure 门户 > Azure Active Directory > 应用程序注册 > 新应用程序注册在 Azure AD 中注册了我的应用程序:
名称 = MyWebApi
应用程序类型 = Web 应用程序 / API
登录 URL = http://localhost:55000
创建此应用程序后,我打开其清单文件并将oauth2AllowImplicitFlow从false更改为true。
这就是我在 azure 门户中为应用程序注册所做的全部工作。
然后我从 chrome 浏览器手动调用以下 URL 来获取 access_token:
调用上述 url 的响应是:
当我将 MY-ACCESS-TOKEN 作为授权标头中的承载令牌传递到我的 Web API (.net core 2.2) 时,出现以下异常:
Microsoft.IdentityModel.Tokens.SecurityTokenInvalidSignatureException:IDX10511:签名验证失败。尝试过的密钥:“Microsoft.IdentityModel.Tokens.X509SecurityKey,KeyId:N-lC0n-9DALqwhuHYnHQ63GeCXc”。
然后我尝试手动验证签名:
当我将 MY-ACCESS-TOKEN 粘贴到https://jwt.io/时,标题为:
{
"typ": "JWT",
"nonce": "AQABAAAAAACEfexXxjamQb3OeGQ4Gugvm6YdOT-bkA0IPllKMt06-J8If5AQ075TVCav94X_ZYcEYKaPneqdJcqYry-Z4XjX0eMN_fiJX_8wXe9D2b6eRiAA",
"alg": …Run Code Online (Sandbox Code Playgroud) 问题:
它们是两个表 TableEmails 和 TableSentEmailRecords。因此,每当发送电子邮件时,都会在 TableSentEmailRecords 中存储一条记录,例如发送时间等。
我想做一个 LINQ 查询,它让我的 TableEmails 列加上一个来自 TableSentEmailRecords 的“SentDate”列,它显示了发送电子邮件的最新日期。
我试过这个:
List<CustomEmail> emails = new List<CustomEmail>();
var query = from c in db.TableEmails
join o in db.TableSentEmailRecords on c.EmailId equals o.EmailId
select new CustomEmail
{
EmailName = c.EmailName,
EmailId= c.EmailId,
EmailDescription = c.EmailDescription,
LastDateEmailSentOut = o.SentDate
};
emails = query.ToList();
Run Code Online (Sandbox Code Playgroud)
但这不一定从 TableSentEmailRecords 表中获取该特定电子邮件的最新记录。
有任何想法吗 ???