我很难理解[Authorize]ASP.NET MVC 中属性的实际使用.根据概念,如果我们使用[Authorize]属性修饰控制器方法,则只允许经过身份验证的用户访问控制器.
我开发了一个ASP.NET MVC应用程序,没有用[Authorize]属性装饰控制器.我观察到的是,如果我使用web.config或其他方式在我的应用程序中正确实现身份验证机制,那么我现在可以访问{controller}/{action}/{id}特定操作方法的URL .
系统总是要求登录.这意味着我的控制器是安全的.我的问题是,当我可以在不使用[Authorize]属性的情况下保护我的控制器时,它的真正需求是什么?
我在C#.NET中编写了以下代码
public interface IWork
{
void func();
}
public abstract class WorkClass
{
public void func()
{
Console.WriteLine("Calling Abstract Class Function");
}
}
public class MyClass:WorkClass,IWork
{
}
Run Code Online (Sandbox Code Playgroud)
在编译时,我没有收到任何错误.编译器并没有强迫我实现方法"func();" 在"MyClass"中,它来自接口"IWork".Latter,我可以优雅地创建类"MyClass"的实例并调用函数"func()".为什么编译器不强迫我在"MyClass"中实现"func()"方法(它来自"IWork"接口?这是C#中的一个缺陷吗?
我试图实现REST WCF以探索PUT和POST动词之间的区别.我已使用该服务在某个位置上传了一个文件.
服务实现如下:
[OperationContract]
[WebInvoke(UriTemplate = "/UploadFile", Method = "POST")]
void UploadFile(Stream fileContents);
public void UploadFile(Stream fileContents)
{
byte[] buffer = new byte[32768];
MemoryStream ms = new MemoryStream();
int bytesRead, totalBytesRead = 0;
do
{
bytesRead = fileContents.Read(buffer, 0, buffer.Length);
totalBytesRead += bytesRead;
ms.Write(buffer, 0, bytesRead);
} while (bytesRead > 0);
using (FileStream fs = File.OpenWrite(@"C:\temp\test.txt"))
{
ms.WriteTo(fs);
}
ms.Close();
Run Code Online (Sandbox Code Playgroud)
}
客户端代码如下:
HttpWebRequest request = (HttpWebRequest)HttpWebRequest.Create("http://localhost:1922 /EMPRESTService.svc/UploadFile");
request.Method = "POST";
request.ContentType = "text/plain";
byte[] fileToSend = File.ReadAllBytes(@"C:\TEMP\log.txt"); // txtFileName contains …Run Code Online (Sandbox Code Playgroud) 我已经实现了Generices如下:
public class GenericAnimal<T>
{
public int legs;
public void Walk()
{
Console.WriteLine("Animals Walk....");
}
}
public class Dog
{
public void Bark()
{
Console.WriteLine("Barking....");
}
}
public class Cat
{
public void Mew()
{
Console.WriteLine("Mewing....");
}
}
Run Code Online (Sandbox Code Playgroud)
然后我使用该类如下:
GenericAnimal<Dog> dogObj = new GenericAnimal<Dog>();
GenericAnimal<Cat> catObj = new GenericAnimal<Cat>();
Run Code Online (Sandbox Code Playgroud)
在dogObj和catObj中,我都得到了"Walk"方法.我可以用抽象类做这件事.那么使用Generics而不是Abstract类有什么额外的好处呢?
我写了一段代码如下:
var i=5;
i='K';
Run Code Online (Sandbox Code Playgroud)
编译代码没有错误.就我的概念而言,我无法在var中重新赋值.因为我已将整数5分配给i.i的类型是int.那么为什么它允许在i中分配一个char'K'?