标签: query-string

在页面之间传递数据的最佳实践

问题

在我们在项目之间重用的堆栈中,我们在会话中放置了一些过多的数据,用于在页面之间传递数据.这在理论上是好的,因为它可以防止篡改,重放攻击等,但它会产生尽可能多的问题.

会话丢失本身是一个问题,尽管它主要通过实现会话状态服务器(或使用SQL Server)来处理.更重要的是,使后退按钮正常工作非常棘手,而且创建一种情况也是额外的工作,用户可以在三个选项卡中打开相同的屏幕来处理不同的记录.

这只是冰山一角.

大多数这些问题都有解决方法,但是当我磨砺掉时,所有这些摩擦让我觉得使用session在页面之间传递数据是错误的方向.

我真正想要做的是提出一个最佳实践,我的商店可以一直使用它来在页面之间传递数据,然后,对于新的应用程序,替换当前依赖于Session的堆栈的关键部分.

如果最终解决方案不会导致大量的样板管道代码,那也很好.

提出的解决方案

会议

如上所述,严重依赖Session 似乎是一个好主意,但它会打破后退按钮并导致其他一些问题.

可能有办法解决所有问题,但似乎需要做很多额外的工作.

使用会话非常好的一件事是篡改不是问题.与通过未加密的QueryString传递所有内容相比,您最终编写的守护代码更少.

跨页发布

事实上,我几乎没有考虑过这个选择.我有一个问题,它如何使页面紧密耦合 - 如果我开始做PreviousPage.FindControl("SomeTextBox"),这似乎是一个维护问题,如果我想从另一个页面可能没有到达此页面一个名为SomeTextBox的控件.

它似乎也受到其他方面的限制.也许我想通过链接访问该页面.

请求参数

我现在正倾向于这种策略,就像在过去那样.但我可能希望我的QueryString被加密以使其更难以篡改,我也想处理重放攻击的问题.

来自Rolla的4个人,有一篇关于此的文章.

但是,应该可以创建一个HttpModule来处理所有这些并从页面中删除所有加密香肠.果然,Mads Kristensen有一篇文章,他发布了一篇文章.但是,这些评论听起来似乎有极其常见的情况.

其他选择

当然,这不是对选项的详尽看法,而是我正在考虑的主要选项.此链接包含更完整的列表.我没有提到的那些如Cookies和Cache不适合在页面之间传递数据.

在结束...

那么,您如何处理页面之间传递数据的问题?你需要解决什么隐藏的陷阱,是否有任何预先存在的工具可以完美地解决它们?难道你觉得你已经得到了你和完全满意的解决方案?

提前致谢!

更新:以防万一我不够清楚,通过'在页面间传递数据'我正在谈论,例如,将CustomerID密钥从CustomerSearch.aspx页面传递给Customers.aspx,客户将在那里打开并且可以进行编辑.

asp.net encryption webforms query-string

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

URL参数和查询字符串之间有什么区别?

我在URL中看不到参数和查询字符串之间的差别.那么有什么区别,什么时候应该使用?

url url-parameters query-string

64
推荐指数
3
解决办法
14万
查看次数

查询字符串键是否区分大小写?

假设我有这样的网址:

http://www.example.com?key=123&KEY=198
Run Code Online (Sandbox Code Playgroud)

那将是什么结果

request.querystring("key")

and 

request.querystring("KEY")
Run Code Online (Sandbox Code Playgroud)

我有点困惑.

url uri http request.querystring query-string

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

如何将对象序列化为查询字符串格式?

如何将对象序列化为查询字符串格式?我似乎无法在谷歌上找到答案.谢谢.

这是我将序列化的对象作为示例.

public class EditListItemActionModel
{
    public int? Id { get; set; }
    public int State { get; set; }
    public string Prefix { get; set; }
    public string Index { get; set; }
    public int? ParentID { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

asp.net serialization object query-string

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

可以在查询字符串之前跳过斜杠吗?

附加查询字符串时总是跳过尾部斜杠是否安全?

也就是说,我可以使用

http://example.com?querystring
Run Code Online (Sandbox Code Playgroud)

代替:

http://example.com/?querystring
Run Code Online (Sandbox Code Playgroud)

?我使用的所有webhost都支持这个,但是可以安全地假设所有服务器环境都支持这种方法吗?这是标准的吗?

url query-string

60
推荐指数
3
解决办法
2万
查看次数

使用属性路由时查询字符串不起作用

我正在使用System.Web.Http.RouteAttributeSystem.Web.Http.RoutePrefixAttribute为我的Web API 2应用程序启用更干净的URL.对于我的大部分请求,我可以使用路由(例如Controller/param1/param2)或者我可以使用查询字符串(例如Controller?param1=bob&param2=mary).

不幸的是,对于我的一个控制器(并且只有一个),这会失败.这是我的控制器:

[RoutePrefix("1/Names")]
public class NamesController : ApiController
{

    [HttpGet]
    [Route("{name}/{sport}/{drink}")]
    public List<int> Get(string name, string sport, string drink)
    {
        // Code removed...
    }

    [HttpGet]
    [Route("{name}/{drink}")]
    public List<int> Get(string name, string drink)
    {
        // Code removed...
    }
}
Run Code Online (Sandbox Code Playgroud)

当我使用路由请求时,两者都可以正常工作.但是,如果我使用查询字符串,它会失败,告诉我该路径不存在.

我已经尝试将以下内容添加到我的WebApiConfig.cs类' Register(HttpConfiguration config)函数(在默认路由之前和之后),但它没有做任何事情:

config.Routes.MapHttpRoute(
name: "NameRoute",
routeTemplate: "{verId}/Names/{name}/{sport}/{drink}",
defaults: new { name = RouteParameter.Optional, sport = RouteParameter.Optional, drink = RouteParameter.Optional },
constraints: new { verId = @"\d+" }); …
Run Code Online (Sandbox Code Playgroud)

c# query-string asp.net-web-api attributerouting asp.net-web-api-routing

60
推荐指数
6
解决办法
7万
查看次数

在MVC控制器中使用查询字符串变量

我是C#.net MVC的新手,我正在尝试添加FullCalendar到MVC应用程序.

FullCalendar脚本自动添加?start={}&end={}到URL ...这很好,但我不知道如何querystring在控制器中使用变量.

我在Webforms应用程序中使用的方法不起作用.我需要添加到控制器以访问querystring变量?

c# asp.net-mvc query-string

57
推荐指数
2
解决办法
15万
查看次数

Objective-C:如何将查询参数添加到NSURL?

比方说我有一个NSURL?它是否已经有一个空的查询字符串,我如何添加一个或多个参数给queryNSURL?即,有没有人知道这个功能的实现?

- (NSURL *)URLByAppendingQueryString:(NSString *)queryString
Run Code Online (Sandbox Code Playgroud)

这样它就满足了这个NSURL+AdditionsSpec.h文件:

#import "NSURL+Additions.h"
#import "Kiwi.h"

SPEC_BEGIN(NSURL_AdditionsSpec)

describe(@"NSURL+Additions", ^{
    __block NSURL *aURL;

    beforeEach(^{
        aURL = [[NSURL alloc] initWithString:@"http://www.example.com"];
        aURLWithQuery = [[NSURL alloc] initWithString:@"http://www.example.com?key=value"];
    });

    afterEach(^{
        [aURL release];
        [aURLWithQuery release];
    });

    describe(@"-URLByAppendingQueryString:", ^{
        it(@"adds to plain URL", ^{
            [[[[aURL URLByAppendingQueryString:@"key=value&key2=value2"] query] should]
             equal:@"key=value&key2=value2"];
        });

        it(@"appends to the existing query sting", ^{
            [[[[aURLWithQuery URLByAppendingQueryString:@"key2=value2&key3=value3"] query] should]
             equal:@"key=value&key2=value2&key3=value3"];
        });
    });
});

SPEC_END
Run Code Online (Sandbox Code Playgroud)

objective-c nsurl query-string

56
推荐指数
7
解决办法
6万
查看次数

如何使用c#从asp.net中的querystring中删除项目?

我想从我的网址中删除"语言"查询字符串.我怎样才能做到这一点 ?(使用Asp.net 3.5,c#)

Default.aspx?Agent=10&Language=2
Run Code Online (Sandbox Code Playgroud)

我想删除"语言= 2",但语言将是第一个,中间或最后一个.所以我会有这个

Default.aspx?Agent=20
Run Code Online (Sandbox Code Playgroud)

.net c# asp.net query-string

54
推荐指数
5
解决办法
11万
查看次数

有没有办法将所有查询字符串名称/值对都放入集合中?

有没有办法将所有查询字符串名称/值对都放入集合中?

我在.net中寻找内置方式,如果不是,我可以拆分&并加载一个集合.

c# asp.net collections query-string

54
推荐指数
4
解决办法
7万
查看次数