小编M. *_*har的帖子

如何配置Web Api 2以在单独的项目中查找控制器?(就像我以前在Web Api中所做的那样)

我曾经将我的控制器放在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中这样做?

c# asp.net-web-api asp.net-web-api2

49
推荐指数
5
解决办法
4万
查看次数

如何禁用EF中的代码优先功能(MVC4 Visual Studio 2012)

如何禁用EF中的代码优先功能(Visual Studio 2012)

我正在使用Visual Studio 2012,MVC4(Internet应用程序模板).

我想使用EF,但不使用其代码优先功能.我希望应用程序出错,而不是根据我的代码创建或修改我的数据库.(我只是不能忍受我的数据库在幕后被改变的感觉...我希望应用程序使用我创建的确切数据库...如果有任何必须更改的东西,我会自己动手)

这是新的Ef(VS2012)的可能吗?

我见过很多人问这个,但到目前为止我无法找到答案.

entity-framework ef-code-first asp.net-mvc-4 visual-studio-2012

15
推荐指数
1
解决办法
7566
查看次数

"Facebook活动源"插件的任何替代品,因为它被弃用了?

正如标题所述,我正在寻找任何快速简便的替代方案来实现像'Facebook Activity Feed'插件.

Facebook拥有的那个现在已于2015年6月23日被弃用.

https://developers.facebook.com/docs/plugins/activity

我相信Facebook会提供一些快速的选择,或者必须有一些类似的插件.不想花很多时间使用新的Graph API创建自己的.

facebook facebook-graph-api

6
推荐指数
1
解决办法
3552
查看次数

moq callbase用于不返回值的方法(void方法)

我正在尝试模拟我正在测试的类,以便在测试它们时可以调用各个方法的基础.这将允许我仅将方法设置测试为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)

一旦我使方法返回一些东西,这样一个布尔值,它就变得可用.

tdd unit-testing moq mocking

5
推荐指数
1
解决办法
4885
查看次数

无法验证从 Azure AD 获取的访问令牌签名以保护 Web API

我正在尝试使用隐式流通过 Azure Ad 保护我的 Web api (.net core 2.2)。

我使用 Azure 门户 > Azure Active Directory > 应用程序注册 > 新应用程序注册在 Azure AD 中注册了我的应用程序:

名称 = MyWebApi

应用程序类型 = Web 应用程序 / API

登录 URL = http://localhost:55000

创建此应用程序后,我打开其清单文件并将oauth2AllowImplicitFlowfalse更改为true

这就是我在 azure 门户中为应用程序注册所做的全部工作。

然后我从 chrome 浏览器手动调用以下 URL 来获取 access_token:

https://login.microsoftonline.com/MY-AD-TENANT-GUID/oauth2/v2.0/authorize?client_id=MY-REGISTERED-APP-GUID&response_type=token&redirect_uri=http%3A%2F%2Flocalhost%3A55000&scope=openid&response_mode=分段

调用上述 url 的响应是:

http://localhost:55000/#access_token=MY-ACCESS-TOKEN&token_type=Bearer&expires_in=3600&scope=profile+openid+email+00000003-0000-0000-c000-000000000000%2fUser.Read&session_state=b2be972a-cfbc-49f1-bfc0- 6c93f6c87d02

当我将 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)

oauth-2.0 jwt azure-active-directory openid-connect

5
推荐指数
1
解决办法
5500
查看次数

LINQ 加入以从第二个表中获取最新记录

问题:

它们是两个表 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 表中获取该特定电子邮件的最新记录。

有任何想法吗 ???

c# linq asp.net

3
推荐指数
1
解决办法
4912
查看次数