小编MrD*_*pan的帖子

如何在asp.net中识别impersonate ="true"时获取Windows用户名?

我正在创建一个内部网asp.net mvc应用程序,公司中的每个人都应该可以访问它.我需要运行模拟数据库访问的网站等,但我想知道每个用户是谁.

当我看着Page.User.Identity.Name它的空白时.即使网站正在模拟运行,是否可以获取用户的Windows帐户名称?

编辑: 这里有更多信息.我在IIS 6中有一个运行匿名访问的站点.该站点在可以访问数据库的系统帐户下运行(因为所有员工都无权访问数据库).

我的web.config有<authentication mode="Windows" /><identity impersonate="true"/>

我的目标是用户不必登录 - 他们登录我们网络的事实(以及该网站不在外部IP上的事实)是足够的身份验证.我想知道用户是谁以跟踪他们所做的更改等.

asp.net-mvc impersonation

45
推荐指数
2
解决办法
9万
查看次数

如何使用json将复杂类型传递给ASP.NET MVC控制器

我有一个允许用户输入/编辑新Widget数据的视图.我想将这些数据组成一个json对象并通过AJAX将它发送给我的控制器,这样我就可以在没有回发的情况下在服务器上进行验证.

我已经完成了所有工作,除了我无法弄清楚如何传递数据,所以我的控制器方法可以接受复杂的Widget类型而不是每个属性的单独参数.

所以,如果这是我的对象:

public class Widget
{
   public int Id { get; set; }
   public string Name { get; set; }
   public decimal Price { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

我希望我的控制器方法看起来像这样:

public JsonResult Save(Widget widget)
{
   ...
}
Run Code Online (Sandbox Code Playgroud)

目前,我的jQuery看起来像这样:

var formData = $("#Form1").serializeArray();

$.post("/Widget/Save",
   formData,
   function(result){}, "json");
Run Code Online (Sandbox Code Playgroud)

我的表单(Form1)为Widget(Id,Name,Price)上的每个属性都有一个输入字段.这很好用,但它最终将Widget的每个属性作为单独的参数传递给我的控制器方法.

有没有一种方法可以"拦截"数据,可能使用ActionFilterAttribute,并在调用控制器方法之前将其反序列化为Widget对象?

asp.net asp.net-mvc jquery json

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

LINQ条件组

是否可以使用条件组子句编写LINQ语句?这基本上就是我要做的事情:

bool someFlag = false;

var result = from t in tableName
   group t by new { (someFlag ? 0 : t.FieldA), t.FieldB } into g
   select g;
Run Code Online (Sandbox Code Playgroud)

所以基本上如果someFlag设置为true,我想只按FieldB分组,但如果它是假的,我想按FieldA和FieldB分组.

linq grouping

16
推荐指数
1
解决办法
7912
查看次数

SQL Service Broker和.NET Windows服务 - 最佳实践?

我目前有一个从遗留应用程序更新的数据库.我想利用SQL Service Broker队列,以便在更新记录时,将消息放入队列中(使用触发器或其他东西).

然后,我希望有一个长时间运行的应用程序(用.NET编写的Windows服务),它不断"监听"队列以获取消息并处理它们以用于另一个应用程序.

我在网上找到了一些示例代码,只想获得一些关于代码是否可靠的输入.所以,这是Windows服务类的缩写版本:

public class MyService
{
    public void StartService()
    {
        Thread listener = new Thread(Listen);
        listener.IsBackground = true;
        listener.Start();
    }

    private void Listen()
    {
        while (true)
        {
            using (SqlConnection connection = new SqlConnection(_connectionString))
            {
                string commandText = "WAITFOR ( RECEIVE * FROM MyQueue);";
                using (SqlCommand command = new SqlCommand(commandText, connection))
                {
                    connection.Open();
                    command.CommandTimeout = 0;
                    SqlDataReader reader = command.ExecuteReader();
                    while (reader.Read())
                    {
                        // Process message
                    }
                }
            }
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

你怎么看?代码完全按照我想要的方式工作.但是,关闭包含SQL命令的新线程的想法永远不会超时 - 在无限循环内 - 让我有点紧张.

.net sql-server service-broker

12
推荐指数
1
解决办法
3625
查看次数

工作单元和存储库模式

我使用NHibernate设置了存储库模式.基类如下所示:

public interface IUnitOfWork : IDisposable
{
    void Commit();
    void Rollback();
}

// generic NHibernate implementation of IUnitOfWork here

public class NHibernateRepositoryBase<T> : IRepository<T>
{
    private NHibernateUnitOfWork _unitOfWork;

    public NHibernateRepositoryBase(NHibernateUnitOfWork unitOfWork)
    {
        _unitOfWork = unitOfWork;
    }
    public T Get(object id)
    {
        return _unitOfWork.Session.Get<T>(id);
    }

    // ...
}
Run Code Online (Sandbox Code Playgroud)

如您所见,我允许通过构造函数(使用StructureMap)填充工作单元.我正在填充ASP.NET Web服务上的存储库对象,如下所示:

[WebService(Namespace = "...")]
[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
public class ModuleService : System.Web.Services.WebService
{
    public IUserAccountRepository UserAccountRepo { get; set; }

    public ModuleService()
    {
        // tell IoC to inject properties
        ObjectFactory.BuildUp(this);
    }

    // …
Run Code Online (Sandbox Code Playgroud)

c# design-patterns unit-of-work repository-pattern

12
推荐指数
1
解决办法
5126
查看次数

ModelState.IsValid或Model.IsValid?

我正在编写一个控制器和单元测试,当我遇到两种方式(我认为同样有效)做某事.我的所有模型都有一个IsValid属性,我可以检查它是否有效.

在回发到控制器操作方法时,如果模型有效,我想保存,否则我想重新显示表单以供用户更正错误.

我最初的想法只是验证模型是否被问及是否有效,但我意识到我还可以检查ModelState.IsValid.

有没有人有任何特别的理由看一个与另一个?

validation asp.net-mvc model

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

你会说这个CRUD课程的名字是什么?

试图在这里避免SomethingManager陷阱......

假设我要编写一个用户编辑器,允许管理员在系统中创建用户.非常基本的功能 - 查看现有用户列表,创建新用户,更新现有用户,删除用户.

我们还要说,我决定编写一个"业务"类来处理这些基本的CRUD操作.这可能是界面的样子:

public interface ISomeUsefulName
{
    IList<User> FetchUsers();
    User FetchUser(int userId);
    bool SaveUser(User user);
    bool DeleteUser(int userId);
}
Run Code Online (Sandbox Code Playgroud)

例如,在SaveUser()方法中,我将验证数据(使用不同的类),然后实际将数据保存到数据库(再次使用另一个类).

我的问题是,我应该为这堂课命名什么?这个类做得太多了,因此我应该把它分成多个类吗?

crud naming-conventions

8
推荐指数
2
解决办法
6240
查看次数

ASP.NET MVC查看用户控件 - 如何设置ID?

我需要在我的页面上有一个下拉列表,允许用户选择他们的状态.由于这可能是一个将在别处使用的控件,我认为创建一个可以重用的MVC View用户控件是个好主意.

我在想控件看起来像这样:

<select name="" id="">
   <option value="AL">Alabama</option>
   <option value="AK">Alaska</option>
</select>
Run Code Online (Sandbox Code Playgroud)

我的视图中的代码将是这样的:

<%= Html.RenderPartial("StateDropdownControl") %>
Run Code Online (Sandbox Code Playgroud)

我的问题是,在控件上设置名称和ID的最佳方法是什么?如果需要,我想确保在一个页面上可以有多个此控件实例.此外,我希望能够发送默认情况下应该选择的状态.

我会以某种方式使用ViewData吗?

asp.net asp.net-mvc

7
推荐指数
1
解决办法
4326
查看次数

SQL CLR触发器可以执行此操作吗?或者,还有更好的方法?

我想编写一个监视数据库表的服务(可能在c#中).当记录插入表中时,我希望服务获取新插入的数据,并使用它执行一些复杂的业务逻辑(对于TSQL来说太复杂).

一种选择是让服务定期检查表以查看是否已插入新记录.这样做的问题是我希望服务一旦发生就知道插件,我不想杀死数据库性能.

做一点研究,似乎写一个CLR触发器可以完成这项工作.我可以在c#中编写触发器,当插入发生时触发,然后将新插入的数据发送到Windows或WCF服务.

您认为,SQL CLR触发器的良好(甚至可能)使用是什么?

关于如何实现这一目标的任何其他想法?

sql t-sql sql-server triggers sqlclr

7
推荐指数
1
解决办法
4631
查看次数

在同一对象上调用两次时,MustHaveHappened失败

给定以下测试类(以及相关的DTO类和接口):

public class Foo
{
    private readonly IBar _bar;

    public Foo(IBar bar) { _bar = bar; }

    public void DoStuff()
    {
        var dto = new DTO();

        dto.Num = 1;
        _bar.Test(dto);

        dto.Num = 2;
        _bar.Test(dto);
    }
}

public class DTO { public int Num { get; set; } }

public interface IBar { void Test(DTO dto); }
Run Code Online (Sandbox Code Playgroud)

而这个测试方法(试图验证IBar.Test()被调用两次:一次用Num = 1,一次用Num = 2):

public void TestMethod1()
{
    var bar = A.Fake<IBar>();
    var foo = new Foo(bar);
    foo.DoStuff();

    A.CallTo(() => bar.Test(A<DTO>.That.Matches(x => x.Num …
Run Code Online (Sandbox Code Playgroud)

c# unit-testing fakeiteasy

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