我正在创建一个内部网asp.net mvc应用程序,公司中的每个人都应该可以访问它.我需要运行模拟数据库访问的网站等,但我想知道每个用户是谁.
当我看着Page.User.Identity.Name它的空白时.即使网站正在模拟运行,是否可以获取用户的Windows帐户名称?
编辑: 这里有更多信息.我在IIS 6中有一个运行匿名访问的站点.该站点在可以访问数据库的系统帐户下运行(因为所有员工都无权访问数据库).
我的web.config有<authentication mode="Windows" />和<identity impersonate="true"/>
我的目标是用户不必登录 - 他们登录我们网络的事实(以及该网站不在外部IP上的事实)是足够的身份验证.我想知道用户是谁以跟踪他们所做的更改等.
我有一个允许用户输入/编辑新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对象?
是否可以使用条件组子句编写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分组.
我目前有一个从遗留应用程序更新的数据库.我想利用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命令的新线程的想法永远不会超时 - 在无限循环内 - 让我有点紧张.
我使用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) 我正在编写一个控制器和单元测试,当我遇到两种方式(我认为同样有效)做某事.我的所有模型都有一个IsValid属性,我可以检查它是否有效.
在回发到控制器操作方法时,如果模型有效,我想保存,否则我想重新显示表单以供用户更正错误.
我最初的想法只是验证模型是否被问及是否有效,但我意识到我还可以检查ModelState.IsValid.
有没有人有任何特别的理由看一个与另一个?
试图在这里避免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()方法中,我将验证数据(使用不同的类),然后实际将数据保存到数据库(再次使用另一个类).
我的问题是,我应该为这堂课命名什么?这个类做得太多了,因此我应该把它分成多个类吗?
我需要在我的页面上有一个下拉列表,允许用户选择他们的状态.由于这可能是一个将在别处使用的控件,我认为创建一个可以重用的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吗?
我想编写一个监视数据库表的服务(可能在c#中).当记录插入表中时,我希望服务获取新插入的数据,并使用它执行一些复杂的业务逻辑(对于TSQL来说太复杂).
一种选择是让服务定期检查表以查看是否已插入新记录.这样做的问题是我希望服务一旦发生就知道插件,我不想杀死数据库性能.
做一点研究,似乎写一个CLR触发器可以完成这项工作.我可以在c#中编写触发器,当插入发生时触发,然后将新插入的数据发送到Windows或WCF服务.
您认为,SQL CLR触发器的良好(甚至可能)使用是什么?
关于如何实现这一目标的任何其他想法?
给定以下测试类(以及相关的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) asp.net-mvc ×4
asp.net ×2
c# ×2
sql-server ×2
.net ×1
crud ×1
fakeiteasy ×1
grouping ×1
jquery ×1
json ×1
linq ×1
model ×1
sql ×1
sqlclr ×1
t-sql ×1
triggers ×1
unit-of-work ×1
unit-testing ×1
validation ×1