小编Dav*_*mid的帖子

在iOS中下载整个网页,不使用ASIHTTPRequest

在ASIHTTPRequest库中是否有ASIWebPageRequest的替代方法,我可以用它来下载iOS中的整个网页,包括CSS,JavaScript和图像文件等?我似乎无法在AFNetworking框架中找到类似的类,到目前为止我的搜索还没有成功.我不能使用ASIHTTPRequest,因为我似乎无法在我的任何应用程序中使用它,没有我为iOS7找到工作的例子而且我更倾向于使用更新的东西.

我基本上想要将整个网页存储在iPhone/iPad上的目录中,以便用户可以在本地编辑它,然后将整个目录发送到他们的Web服务器.用户还需要能够在UIWebView中随时查看网页.

如果这不可能,我将只需下载HTML文件,然后解析它以查找外部资源的URL,然后单独下载.我宁愿不这样做,但是如果我必须那么什么是最好的图书馆来完成这个?

感谢任何人帮助我!

objective-c uiwebview asihttprequest ios afnetworking

8
推荐指数
1
解决办法
1293
查看次数

设置 WebAPI 2 OData 服务的默认页面大小

我有一个 ODataController ,其端点如下:

[EnableQuery]
public IQueryable<Customer> Get()
{
    return _context.Customers;
}
Run Code Online (Sandbox Code Playgroud)

WebApiConfig 的 Register 方法中的此设置:

config.Count().Filter().OrderBy().Expand().Select().MaxTop(100);
Run Code Online (Sandbox Code Playgroud)

有很多客户条目,我不希望客户一次请求太多,因为查询将花费很长时间。幸运的是,这个设置意味着如果他们发出这样的请求:

http://domain.com/api/Customers ?$top=1000

因为它高于 100,所以会阻止他们检索它们。

但是,如果他们提出这样的请求:

http://domain.com/api/Customers

然后,这将尝试检索所有客户,这是我不想要的。

我知道我可以这样设置页面大小:

[EnableQuery(PageSize = 10)]
public IQueryable<Customer> Get()
{
    return _context.Customers;
}
Run Code Online (Sandbox Code Playgroud)

这只会返回 10 个结果,但是我仍然希望用户能够指定自己的 $top 和 $skip 值进行分页(并决定每页需要多少个结果)。我想要的是最多 100 个,默认为 10 个。

我怎样才能实现这个目标?

编辑

我尝试了以下方法,但在使用 Expand 子句时它无法正常工作。还有其他想法吗?

[EnableQuery(MaxTop = 100)]
public IQueryable<Customer> Get(ODataQueryOptions<Customer> queryOptions)
{
    IQueryable<Customer> query = _context.Customers;
    int? top = queryOptions?.Top?.Value;
    if (top == null)
    {
        query = query.Take(10);
    }

    return query;
}
Run Code Online (Sandbox Code Playgroud)

asp.net odata asp.net-web-api

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

在 MVC4 中向 ClaimsPrincipal 添加多个身份

在我的 MVC4 应用程序中,有两种登录方式;作为客户或后台管理员。

目前,如果您以其中任何一种身份登录,ClaimsPrincipal 将被替换为包含新登录的单一身份的全新的。目前不可能同时登录客户帐户和管理员帐户,这是我们现在的要求。

我觉得使用此处描述的 AddIdentity 方法向现有的 ClaimsPrincipal 添加新身份是有意义的:https: //msdn.microsoft.com/en-us/library/system.security.claims.claimsprincipal.addidentity( v=vs.110).aspx

然而,这并没有添加第二个身份。然后我找到了这篇文章:https://blogs.msdn.microsoft.com/mrochon/2017/06/23/claims-augmentation-post-token/

这部分我特别感兴趣:

从理论上讲,通过向 ClaimsPrincipal 添加新的 ClaimsIdentity 应该可以实现这一点。但是,ASP.NET 4 中的 OWIN 不会序列化新标识。另一种方法是修改现有的 ClaimsIdentity,如下所示

那么,如果在 ASP.NET 4 中不可能,为什么不呢?Microsoft 文档中哪里提到了这一点?如果我们迁移到 .NET Core,我们可以期望它能够工作吗?ASP.NET 4 中有解决此问题的方法吗?

c# asp.net authentication claims-based-identity owin

5
推荐指数
0
解决办法
476
查看次数

是否显示UIView?

我有一个UIViewController.根UIView包含一个自定义UIScrollView,用于在网格中显示缩略图图像(ThumbnailGrid类).这个网格可以包含很多显示图像的UIViews(GridTile类).因为有很多网格图块,用户可以向下滚动ThumbnailGrid.我只想加载用户实际可以看到的网格图块的图像,我不想为屏幕边缘的网格图块加载图像.

如何确定是否在屏幕上显示其中一个GridTile UIView?

我尝试了以下但它似乎总是返回false.

- (bool) isViewDisplayed:(UIView*)view
{
        CGRect viewFrame = view.frame;
        CGRect appFrame = [[UIScreen mainScreen] applicationFrame];
        if (CGRectIntersectsRect(viewFrame, appFrame)) return true;
        return false;
}
Run Code Online (Sandbox Code Playgroud)

我错过了什么吗?

在此先感谢您的帮助!

编辑

解决方案

事实证明坐标系统是错误的,所以我得到了一些奇怪的事情,其中​​方法应该返回true,而是返回false,反之亦然.

- (bool) isViewDisplated:(UIView*)view
{
    CGRect viewFrame = [parentOfView convertRect:view.frame toView:nil]; 
    CGRect appFrame = [[UIScreen mainScreen] applicationFrame];
    if (CGRectIntersectsRect(viewFrame, appFrame)) return true;
    return false;
}
Run Code Online (Sandbox Code Playgroud)

objective-c uiview ios

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

使用VSTS设置Azure功能应用程序设置,而不在Azure门户中公开

我们使用VSTS构建各种Azure Web应用程序并将它们部署到不同的环境中.在发布过程中,我们正在对Web.config文件执行转换,使用存储在VSTS中的变量来处理每个环境的连接字符串等内容.

我们想用Azure功能做类似的事情,但我们遇到了问题.我们发现执行转换为appsettings.json文件不起作用.添加的新键/值对在Azure中不起作用,并且Azure中未加载对现有键的更改.

我查看了无数文档,并且只找到了文档,说明Azure功能的应用程序设置必须使用Azure门户存储,或者在发布过程中使用PowerShell脚本进行设置.但是,这些解决方案会将连接字符串和其他秘密暴露给有权访问Azure门户的任何人,这不是我们想要的.

如何向Azure功能提供应用程序设置,例如AzureWebJobsStorage和AzureWebJobsDashboard值,而不在Azure门户上公开它们?

azure azureportal azure-functions azure-pipelines-release-pipeline

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

使用队列触发器取消 Azure Functions,而不使用有害队列

我们使用以下设置:

我们使用带有队列触发器的 Azure 函数来处理 JSON 消息队列。

这些消息均通过 HTTP POST 转发到 API 端点,以进行进一步处理。

API可以返回3种可能的HTTP状态码;200(正常)、400(错误请求)、500(内部服务器错误)。

如果 API 返回 200,则消息已正确处理,一切正常。队列触发功能似乎会自动删除队列消息,这对我们来说没问题。

如果 API 返回 400,则 API 具有获取消息并将其添加到表中的逻辑,该表的状态表明消息格式错误或无法处理。因此,我们同意消息自动从队列中删除,并且 Azure Function 可以正常结束。

如果 API 返回 500,我们确保函数重试将消息发布到 API,直到状态代码为 200 或 400(因为 API 可能存在问题,我们不希望丢失消息)。我们正在使用Polly来实现这一目标。我们对其进行了设置,因此它本质上会以指数退避方式永远重试。

然而我们最近遇到了这个问题:

在某些情况下,API 会针对某些消息返回 500。此错误完全是暂时的,并且会不可预测地出现和消失。使用 Polly 永远重试会很好,除非并非所有消息都会导致此错误,并且本质上“坏”消息会阻止“好”消息的处理。

举例来说,我的队列中有 50 条消息。队列前面的前 32 条消息是“坏”消息,有时会从 API 返回 500。这些消息由 Azure Function 获取并同时处理。其他 18 条消息是“好”消息,将返回 200。在成功处理“坏”消息之前,不会处理这些“好”消息。本质上,坏的会导致好的交通堵塞。

我的解决方案是,如果当前消息已重试一定次数,则尝试取消 Azure 函数的执行。我想也许该消息会在一段时间后变得可见,但在那段时间里,它给了好的消息时间来处理。但是,我不知道如何取消该函数的执行,而不导致队列消息被完全删除或推送到有害队列。

我可以使用队列触发功能来实现这一点吗?我可以使用计时器触发器来代替吗?

非常感谢!

azure azure-queues azure-functions

2
推荐指数
1
解决办法
2930
查看次数