小编Cia*_*uen的帖子

ASP.NET MVC4安全性,身份验证和授权

我正在使用Visual Studio 2011测试版开发一个新的asp.net mvc4项目,并试图让我了解整个安全问题.它是一个内部Intranet应用程序,最初将使用单点登录,因此不会(还)提示用户输入Windows ID /密码.该公司有一个自定义应用程序,用于存储不同应用程序的角色,并可通过存储过程调用获得.它将获取用户的登录ID并返回某种包含角色的集合,例如"MyApp.Data","MyApp.User","MyApp.Admin".那么这就是所谓的 - 这是一个自定义成员资格提供者,自定义角色提供者或其他什么?

我一直在阅读授权,认证,会员资格,角色等所有细节,我现在看不到树木.我已经读过现有的ASP.NET安全对象已经过试用和测试,除非有非常复杂的要求,否则内置的对象就足够了,所以我很乐意使用现有的内容.

因此,如果用户已经登录到网络,这意味着他们已经过身份验证 - 正确吗?如果是这样,那么我只需要实现授权.是否有必要使用Authorize属性修饰每个Controller或Action?如果是这样,如果我从自定义角色存储应用程序中检索角色,那么[Authorize(Roles ="ABC")]的"ABC"部分如何设置?

我从Jon Galloway那里阅读了几篇文章和博客文章,包括这篇文章,但我最后迷路了:

自定义身份验证和授权正确的方法

这么多问题......如果有人知道如何将这一切挂在一起的良好高级描述那么我全都耳朵:)

security authentication asp.net-mvc-4

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

MVC3与EF 4.1和EntityState.Modified

使用MVC3更新对象

我有一个可以修改的模型,请看下面的示例:

[HttpPost]
public ActionResult Edit(Company c)
{
       if (ModelState.IsValid)
       {
           db.Entry(c).State = EntityState.Modified;
           db.SaveChanges();
           return RedirectToAction("Index");
       }
       return View(c);
}
Run Code Online (Sandbox Code Playgroud)

该模型具有未在视图中显示的其他字段,并且无法由用户修改,但是当我单击提交按钮时,未在视图中显示的字段设置为null.

我可以以某种方式让EF知道不修改某些字段吗?谢谢.

entity-framework-4 asp.net-mvc-3

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

SQL Server Compact错误:无法加载DLL的'sqlceme35.dll'.指定的模块无法找到

我正在使用Visual Studio 2008 C#开发Windows窗体应用程序,该应用程序在客户端上使用SQL Server Compact 3.5数据库.客户端很可能是32位Windows XP或Windows Vista计算机.我正在使用标准的Windows Installer项目创建一个MSI文件和setup.exe来在客户端计算机上安装该应用程序.我是SQL Server Compact的新手,所以我之前不必分发像这样的客户端数据库.当我运行setup.exe(在新的Windows XP 32位SP2和Internet Explorer 7上)它安装正常,但是当我运行应用程序时,我收到此错误:

无法加载DLL的'sqlceme35.dll'.指定的模块无法找到

我已经花了几个小时来搜索这个错误,但是我能找到的只是与64位Windows安装有关的问题,而且与我正在使用的普通32位无关.

安装应用程序将找到的所有相关文件复制到指定的安装目录中,包括System.Data.SqlServerCe.dll文件(程序集版本3.5.1.0).数据库文件位于应用程序目录下名为"data"的目录中,其连接字符串为

<add name="Tickets.ieOutlet.Properties.Settings.TicketsLocalConnectionString"         connectionString="Data Source=|DataDirectory|\data\TicketsLocal.sdf"  providerName="Microsoft.SqlServerCe.Client.3.5" />
Run Code Online (Sandbox Code Playgroud)

我有一些问题:

  • 应用程序是否能够找到DLL文件,如果它位于同一目录中,即应用程序本地,或者我是否需要将其安装在GAC中?(如果是这样,我可以使用Windows Installer在GAC中安装DLL文件吗?)
  • 为了使用SQL Server Compact数据库,还有什么我需要与应用程序一起分发吗?
  • 还有其他DLL文件,例如MS interop,用于将数据导出到客户端上的Excel.这些是否需要安装在GAC中,或者将它们定位在应用程序目录中是否足够?

sql-server sql-server-ce

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

PL/SQL - 如何从连接表返回单行

这可能很简单,我现在还没有看到树木.在Oracle中,我从表A中选择基于表A的主键连接到表B的记录.但是,表B可以有多个与表A的主键匹配的记录.这导致我的查询从表中返回重复的行A.以下是我的查询的缩减版本:

TableA                TableB
_______               _________
1, Sec1                2, 11/01/2011
2, Sec2                2
3, Sec3                5, 10/01/2011
4, Sec4                6, 10/01/2011

Select A.SecID, A.SecName, B.DateSent from tableA A   
  inner join tableB B on A.SecID = B.SecID
Run Code Online (Sandbox Code Playgroud)

这将为Sec2返回2条记录 - 如何让它仅返回Sec2的1条记录?我尝试过使用独特而独特但仍然得到相同的结果.

sql oracle plsql

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

如何使用Razor显示动态图像名称

我是MVC的新手,最近使用Razor视图引擎启动了Asp.Net MVC3项目.

目前我在使用Razor将图像名称输出到html img标签时遇到了麻烦.

假设我的模型中有一个Car类,带有一个名为ModelName的字符串属性.我还有一个包含汽车模型图像的文件夹,它们以汽车模型命名,因此我可以按照惯例通过使用名称显示特定模型的图像.

从我的控制器中,我将一系列汽车传递给我的视图并执行以下操作以显示汽车模型图像列表:

@foreach (var item in Model) {
<img src='@item.ModelName.png' />
}
Run Code Online (Sandbox Code Playgroud)

但是如果我尝试运行它,我会收到错误:

编译器错误消息:CS1061:'string'不包含'png'的定义,并且没有扩展方法'png'接受类型'string'的第一个参数可以找到(你是否缺少using指令或汇编引用?)

我也试过了

    @foreach (var item in Model) {
     <img src='@{item.ModelName}.png' />
    }
Run Code Online (Sandbox Code Playgroud)

但结果是:

编译器错误消息:CS1528:预期; 或=(不能在>声明中指定构造函数参数)源错误:

第84行:#line default第85行:#line hidden第86行:WriteLiteral(".png \'">\r \n");第88行:

我可以做到:

@foreach (var item in Model) {
     string imageName = string.Format("{0}.png", item.ModelName);
     <img src='@imageName' />
    }
Run Code Online (Sandbox Code Playgroud)

但这感觉很笨重,肯定有一个更好的方法?

image razor asp.net-mvc-3

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

在 C# 中使用带有 API 密钥的 HttpClient 类中的 PostAsync 方法

我想用 C# 编写这个 curl 脚本的等价物。我的 curl 脚本如下:

curl -X POST \
https://example.com/login \
-H 'api-key: 11111111' \
-H 'cache-control: no-cache' \
-H 'content-type: application/json' \
-d '{
"username": "myemail@hotmail.com,
"password": "mypassword"
}'
Run Code Online (Sandbox Code Playgroud)

我编写的相应 C# 代码如下:

async static void PostRequest()
{
    string url="example.com/login"
    var formData = new List<KeyValuePair<string, string>>();
    formData.Add(new KeyValuePair<string, string>("username", "myemail@hotmail.com"));
    formData.Add(new KeyValuePair<string, string>("password", "mypassword"));
    HttpContent q = new FormUrlEncodedContent(formData);
    // where do I put my api key?
    using (HttpClient client = new HttpClient())
    {
        client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));//ACCEPT header
        client.BaseAddress …
Run Code Online (Sandbox Code Playgroud)

c# curl httprequest

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

C# ASP.NET Core - SocketException: 不知道这样的主机

我遇到的问题似乎与使用异步调用特定 API 相关HttpClient- 奇怪的是它不会一直发生,并且可以通过刷新页面(有时一次,有时多次)来解决。

我认为这可能是本地问题,但在 Azure 上托管会产生相同的结果。

原始异常详细信息:

System.Net.Sockets.SocketException (11001): System.Net.Http.ConnectHelper.ConnectAsync(String host, Int32 port, CancellationToken cancelationToken) 不知道这样的主机

我检查过:

  • API 没有任何限制
  • 在浏览器中传递请求 url 返回预期的 JSON 结果
  • 刷新页面有时可以解决问题

错误的开始: 错误顶部

其余的部分: 错误底部

这是似乎导致问题的方法:

public async Task<List<MoonPhase.Phasedata>> GetPhaseDataAsync(double lat, double lng, int year)
{
    string requestUrl = "https://api.usno.navy.mil/moon/phase?year=" + year + "&coords=" + locationService.FormatCoordinates(lat, lng) + "&tz=0";

    using (var client = new HttpClient())
    {
        var content = await client.GetStringAsync(requestUrl);
        var moonPhaseObject = JsonConvert.DeserializeObject<MoonPhase.RootObject>(content, new JsonSerializerSettings
        {
            NullValueHandling = NullValueHandling.Ignore
        });

        return moonPhaseObject.PhaseData;
    } …
Run Code Online (Sandbox Code Playgroud)

c# asp.net-core-mvc asp.net-core

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

C#调试问题:没有为任何调用堆栈帧加载符号

我试图从C#Web服务dll进入外部dll中引用的方法.我正在开发Web服务代码,可以从我的Winforms应用程序进入它.我试图从Web服务进入的DLL是由其他人开发的,我有dll和pdb文件.当我尝试进入它时,我收到以下消息:

'没有为任何调用堆栈帧加载符号.源代码无法显示'.

这是我的项目设置:

  • 在Vista Ultimate上运行的.NET 3.5,VS 2008 Professional,IIS 7
  • Winforms应用程序WF1.exe,引用我的机器上的1个解决方案中的Web服务DLL WS1.dll
  • 数据库访问dll DA1.dll由另一个开发人员编译,由WS1.dll引用
  • DA1.dll和DA1.pdb文件位于WS1 Web服务项目的根目录中
  • WS1 Web服务编译并发布到我的本地IIS,DA1.dll和DA1.pdb文件被复制到IIS WS1 bin目录

到目前为止一切都那么好,一切都很有效.我打破并步入WF1.exe然后中断并步入WS1.dll上的方法没有问题.但是,当我尝试进入DA1.dll上的方法时,会发生错误.任何帮助赞赏.

(也就是说我附加到WebDev.WebServer.EXE进程尝试进入DA1)

干杯,

夏兰

c# debugging

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

Ajax调用Register操作方法的书呆子晚餐错误

我是MVC的新手,我正在MS MVC2中实现Nerd Dinner MVC示例应用程序.我在第10步,"Ajax启用RSVP接受".我添加了新的RSVP控制器并添加了Register操作方法,如下所示:

public class RSVPController : Controller
{
    DinnerRepository dinnerRepository = new DinnerRepository();

    //
    // AJAX: /Dinners/RSVPForEvent/1

    [Authorize, AcceptVerbs(HttpVerbs.Post)]
    public ActionResult Register(int id) {

        Dinner dinner = dinnerRepository.GetDinner(id);

        if (!dinner.IsUserRegistered(User.Identity.Name)) {

            RSVP rsvp = new RSVP();
            rsvp.AttendeeName = User.Identity.Name;

            dinner.RSVPs.Add(rsvp);
            dinnerRepository.Save();
        }

        return Content("Thanks - we'll see you there!");
    }
}
Run Code Online (Sandbox Code Playgroud)

我添加了对两个Ajax脚本库的引用,并将下面的代码添加到Details视图中,如文章中所述:

<div id="rsvpmsg">

<% if(Request.IsAuthenticated) { %>

    <% if(Model.IsUserRegistered(Context.User.Identity.Name)) { %>       

        <p>You are registred for this event!</p>

    <% } else { %>  

        <%= Ajax.ActionLink( "RSVP for this …
Run Code Online (Sandbox Code Playgroud)

asp.net-mvc asp.net-ajax

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

使用jQuery向同一类的所有按钮添加事件

这可能很容易,但我已经搜索了 SO 并为此尝试了一些建议,但没有一个可行。我正在使用一个 MVC 编辑器模板,它有一个带有标准 html 按钮和其他字段的 div。当我将一个集合传递给模板时,它将使用唯一的 ID 呈现集合中每个项目的字段。然后我想在单击任何按钮时打开一个对话框。按钮在编辑器模板中呈现如下:

@model ProductViewModel
<span>
    <button id="btnSelectTags-@(ViewData.TemplateInfo.HtmlFieldPrefix)" class="sig-button ie-shadowed select-tag" type="button" title="Select tags..." style="margin-right: 10px">Select tags</button>
</span>
// other fields
Run Code Online (Sandbox Code Playgroud)

因此,如果我将一个包含 2 个对象的集合传递给编辑器模板,我会得到以下 html:

<button title="Select tags..." class="sig-button ie-shadowed select-tag" id="btnSelectTags-Products[0]" style="margin-right: 10px;" type="button">
// other fields then next item:
<button title="Select tags..." class="sig-button ie-shadowed select-tag" id="btnSelectTags-Products[1]" style="margin-right: 10px;" type="button">
Run Code Online (Sandbox Code Playgroud)

这看起来不错,并为每个按钮提供了唯一的 ID。他们需要有一个唯一的 id(我认为),因为每个 div 中的项目都可以有自己的一组标签。因此,我想使用此 jQuery 向每个将打开对话框的按钮添加一个单击事件(我也尝试在选择器中包含其他类并尝试不使用“按钮”):

if ($("button.select-tag")) {
    $(".select-tag").click(function () {
        showTagDialogBox();
    });
}
Run Code Online (Sandbox Code Playgroud)

这是标签被渲染的 div:

<div style="display: none">
    <div …
Run Code Online (Sandbox Code Playgroud)

jquery jquery-selectors mvc-editor-templates

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